@0disoft/saylo-vite (英语)
发表 0.1.0-alpha.7 释放包括无损失生产目录收缩. compactCatalogs 默认为真,并只在原始和gzip节能支付解码器预算时适用;小目录保留了原始代表. 在Vite 插件选项中设置为假以进行比较 。 Eager,懒惰和服务器模块共享核心编码器,而现有的开发套接字节保持相容. 压缩 SSS 序列化是单独选择的。 见 生产目录收缩 编辑 α.7 释放记录 用于兼容性.
Saylo Vite 8 插件和开发客户端. 它检测出目录文件的更改,并将其应用到屏幕上而不替换应用模块.
状态
这个读取器描述 0.1.0 (dist-tag语) latest) (中文(简体) ). 见 发布注释 用于范围和验证。 第一个出版的版本是: 0.1.0-alpha.1 从2026-10-06. 也可以从这个寄存器的工作空间使用.
懒惰的开发路径以紧凑的形式发送了完整的现成响应,并恢复到浏览器中已存在的目录形状. 复杂的ICU AST和出错位置被保留了下来,浏览器中没有重新分出ICU. 这一变动已列入 0.1.0-alpha.2 释放。 范围、核查和绩效衡量 紧凑运输票据。 。 。 .
安装文件夹中的启动指南
Α.5焦球包括: 文档索引,JavaScript/TypeScript,React,Svelte,和SvelteKit 正在启动的向导,以及包 API 文档. 可以从应用程序读取 node_modules/@0disoft/saylo-vite/docs/ 没有 GitHub 登录。 早先的α.4 tarball不包括此文档捆绑.
node -e "console.log(require('node:fs').readFileSync('node_modules/@0disoft/saylo-vite/docs/README.md', 'utf8'))"
捆绑内部的链接点与安装在捆绑旁的文档. manifest.json 记录原作和捆绑的SHA-256,正在启动的向导中的可运行代码块与原作相同. 未列入的设计和计量说明仅按标题列出.
安装
安装 @0disoft/saylo-core 作为应用程序运行时的依赖,作为开发依赖的插件和dev客户端. vite 是同龄人依赖关系,目前的要求是Vite 8.
因此,生产SSR建设包括: @0disoft/saylo-vite/client 在应用程序捆绑中,插件添加 @0disoft/saylo-vite 包到捆绑目标(ssr.noExternal) (中文(简体) ). 因此,您不需要安装此软件包作为生产运行时间依赖 。 这种处理方式包括在 0.1.0-alpha.4 释放.
npm install @0disoft/saylo-core@latest
npm install -D @0disoft/saylo-vite@latest vite@8
稳定释放使用 latest 标签; 安装匹配版本的 Saylo 软件包.
配置
这个 0.1.0-alpha.7 发布读取 CLI 兼容 JSON 配置 loadProjectConfig()。相对于配置文件的位置,文件路径是解析的,因此当 Vite 根不同时它们仍然有效。 基础地盘、目录路径和丰富的标签策略可以生活在一个文件中,并被使用 saylo-typegen --config 财务报告和审定财务报表 saylo check --config。共享配置的使用和审查比较记录载于 类型引导。 。 。 .
import { fileURLToPath } from 'node:url';
import saylo, { loadProjectConfig } from '@0disoft/saylo-vite';
const project = loadProjectConfig(fileURLToPath(new URL('./saylo.config.json', import.meta.url)));
// vite.config의 plugins에 등록한다.
const plugins = [saylo(project)];
现有的对象配置也被支持.
// vite.config.mjs
import { defineConfig } from 'vite';
import saylo from '@0disoft/saylo-vite';
export default defineConfig({
plugins: [saylo({
localesDir: 'locales', // Vite root 기준
baseLocale: 'ko',
initialNamespaces: ['demo'], // 생략하면 기준 namespace 전체
timeZone: 'UTC', // 생략하면 UTC
typegen: { outFile: 'generated.d.ts' }, // 선택, Vite root 기준
})],
});
astRuntime (默认) true)仅适用于生产建筑。 当赛罗 core/dist/formatters.js 进口 intl-messageformat,它解决了模块作为一个单独的虚拟模块,并将依赖替换为 @formatjs/icu-messageformat-parser/no-parser.js它不替代整个应用, 和外部 IntlMessageFormat(string) 安保部门改革的外部依赖性保持不变。 如果应用程序调用 parseCatalog 并设置选项 false 关闭此路径 。 此选项包含在 0.1.0-alpha.2 释放.
目录文件布局 locales/<locale>/<namespace>.json。例如, locales/ko/demo.json 财务报告和审定财务报表 locales/en/demo.json。 。 。 .
这个 richText: { demo: { terms: ['link', 'strong'] } } 选项 0.1.0-alpha.7 释放时指定每个命名空间和信件的允许标记。 对于所指定的消息,它会检查每个ICU分支的标记平衡和启动时,生产过程中的允许列表,以及开发过程中的编辑. 无效编辑被诊断为 INVALID_RICH_TEXT,并且开发服务器保留了最后一个有效的目录。 允许在翻译中进行标记顺序,嵌入和省略,没有指定的普通字符串保留已存在的行为. 这项合同也适用于懒散的运输和SSR靴子数据.
生产 vite build --watch 监视默认、手动和自动目录的更改 includeKeys 模式并重新验证每个重建。 它更新了翻译副本,懒散块,并从新磁盘内容中生成类型. 此修补包含在 0.1.0。 。 。 .
选择性构建( 包括关键)
includeKeys 决定哪些信息在生产中被释放。 你可以通过一个精确 namespace:messageId 数组如前,或使用 { from, dynamicKeys? } 对象在源代码中找到密钥。 此特性不在 0.1.0-alpha.4 并列入 0.1.0。 。 。 .
// 수동 목록
saylo({ localesDir: 'locales', baseLocale: 'ko', includeKeys: ['demo:heading', 'demo:greeting'] });
// 자동 분석
saylo({
localesDir: 'locales',
baseLocale: 'ko',
includeKeys: { from: ['src'], dynamicKeys: ['demo:menuKey'] },
});
from 是相对于 Vite 根的文件或目录。 对目录进行递归扫描,以及 .js, (中文(简体) ), .ts, (中文(简体) ), .jsx, (中文(简体) ), .tsx, (中文(简体) ), .vue,以及 .svelte 源头被静态分析与 Babel。 没有被执行。 分析保留了 t 财务报告和审定财务报表 tParts 电话 <script> 和模板表达式,被导入的别名,解结构化别名,以及从模板前缀和后缀中可能得到的每一个密钥. 即使保留了额外的密钥, 匹配字符串也不会被删除 。 无法解决的动态呼叫在 dynamicKeys 缺席。 连通,维特根外的路径,和剖析出的错误也被拒绝. 使用外部的脚本和模板代码 src 拒绝自动分析,所以使用手动密钥列表.
分析还跟踪翻译功能,包括类型断言、非 null断言,或 satisfies,直接引用的结果 bind, (中文(简体) ), call,以及 apply,以及 t 财务报告和审定财务报表 tParts 函数参数和嵌入式分解。 直接成员进入和调整结构 import * as messages 跟踪属于分析范围的已命名的导出别名。 如果您通过一个翻译函数作为组件prop、构建器参数或默认导出,或通过条件值或默认值选择一个函数,则必须在 dynamicKeys。 。 。 .
from 还应包括界定和再出口翻译的文件。 通过分析范围内的相对路径来连接命名空间对象和命名导出的简单可变别名. 当前源检出也遵循 export * from './module' 通过多桶和循环,包括所配置的Vite别名; 这一固定装置包含在 0.1.0。明确命名的出口优先于通配符出口,通配符出口不转发 default。只显示类型通配符的导出被忽略。 无法在扫描源内解决的运行时通配符目标通过诊断停止自动选择;将源输入 from 或使用手册 includeKeys 列表中选择一个选项。 从确认的命名空间对象上克隆一个翻译导出,将其传送到外面,或将其与休息分解 dynamicKeys 或手册 includeKeys 列表中选择一个选项。 来自不相关的外部包和模块的仅导出普通函数的命名空间不算作翻译,而这个限制不适用于它们.
外部模块 from 不自动拉入。 在目前本地的售出生产中 buildStart,配置 Vite resolve.alias 条目(字符串和正则表达式)通过Vite插件解析器解决,以连接命名的导入和再出口以及命名空间导入。 只有已经扫描过的文件 includeKeys.from 参与;在解析后,不会扩大扫描范围或离开Vite根。 它再次决定生产 build --watch 重建 。 无法解析或保持外部的异名,以及在扫描文件外指向的异名,用命名进口商和所涉路径或目标的诊断来阻止构建。 诊断结果表明 from 或别名,或使用明示 includeKeys 列表中选择一个选项。 公务 @0disoft/saylo-* 运行时间和 virtual:saylo 模块保存现有的翻译处理,不遵循其他外部包的自定义翻译导出。 这种支持包含在α.5中,在α.4.中缺失.
在Vue和Svelte中,真实的 HTML 注释和 <script> 身体单独读取。 如果模板表达式或属性包含诸如 <!-- 或脚本标记,分析器停止而不是任意删除任何内容。 使用此语法的文件必须用手动处理 includeKeys 列表中选择一个选项.
此列表不过滤开发服务器和热更新 。 生产渴望 virtual:saylo懒惰的靴子和块,以及 virtual:saylo/server (SSR)全部使用相同的选择. generated.d.ts 生产 typegen 保持整个原始的基础计划。 用于密钥分析的 Babel parser 是 Dev 插件的节点侧依赖性,不包含在浏览器捆绑中.
[] 保留地方和命名空间列表和缺失元数据,同时将信件减少到零。 创建插件时, 列表会被复制并被冻结 。 翻译中断或 requireCompleteTranslations 失败在运行前被检查, 因此无法隐藏 。 将动态确定的密钥放入 dynamicKeys 或留空选项。 不保证自动摇树或性能收益.
完成建筑物的翻译检查
启用 requireCompleteTranslations (默认) false检查Vite生产过程中缺失的翻译密钥和命名空间。 可从 0.1.0-alpha.3 不包括在现有 0.1.0-alpha.2 释放.
import saylo from '@0disoft/saylo-vite';
saylo({ localesDir: 'locales', baseLocale: 'ko', requireCompleteTranslations: true });
除了隐藏文件夹(包括空文件夹)和用于 initialLocale,它检查每个基名空间和密钥是否存在。 缩短初始装载范围 initialNamespaces 不减少检查范围。 既无文件夹又无文件夹的语文 initialLocale 未检查。 空翻译字符串算作已存在的密钥,而翻译副本的语言或忽略参数,不属于完整性条件的一部分. 现有的参数类型和计划检查仍然运行 .
缺失条目作为 MISSING_MESSAGE 财务报告和审定财务报表 MISSING_NAMESPACE 内 CatalogError.diagnostics 和失败的建设。 诊断方法包括地语,取名空间,目标文件,和缺失的密钥,并给出创建缺失文件的相对路径. 检查在生成的类型文件更新前运行,所以现有的文件在失败时会保存. 开发服务器和活编辑即使启用了选项,仍然保留现有的部分翻译和倒置行为. 详细范围和核查情况 完整的翻译说明。 。 。 .
要求审查批准(阿尔法.5)
当前的退票有 requireReviewedTranslations (默认) false)在Vite选项和共享的JSON中 SayloProjectConfig当启用时 reviews 路径需要; Vite 选项中直接给出的相对路径由 Vite 根解决, 从 JSON 读取的路径由 loadProjectConfig() 从 JSON 文件的文件夹中解决.
saylo({
localesDir: 'locales',
baseLocale: 'ko',
requireReviewedTranslations: true,
reviews: 'saylo-reviews.json', // Vite root 기준
});
它只读到批准文件 在生产建筑和处理 SOURCE_CHANGED, (中文(简体) ), TRANSLATION_CHANGED,以及 REVIEW_REQUIRED 状态和缺失或损坏的核准文件作为构建失败。 启用此选项还应用每个地方的完整翻译检查和检查基础密钥, 无论是否 initialNamespaces 或者说 includeKeys。删除翻译无法绕过批准,此检查将在类型生成和密钥刷新之前完成. vite build --watch 还检测到批准文件的更改和再次检查.
开发服务器不读取批准文件,并保留现有的部分翻译和倒置行为. 然而,选项验证也在开发过程中运行,所以 requireReviewedTranslations: true 无 reviews 也会被拒绝.
懒惰加载客户端
版本 0.1.0 发送递增的懒惰开发订阅:每个
分类查询可提升一对,缓存拆出只去除受影响的密钥.
连接、重新连接和会话变化仍然取代整个范围;
关机让店主安全了 服务器订阅补丁验证和地图更新
触摸只改变对。 此修补包含在 0.1.0; 更新 Vite
客户端和服务器一起。 见 订阅比例测量
100/500/1,000-目录固定和线字节结果.
virtual:saylo/lazy 提供初始对和 catalogSource。该应用程序创建了核心实例 createI18n 并连接到开发服务器 connectDev。 。 。 . typegen.outFile 相对于维特根,所以 src/i18n.ts 低于进口 ../generated.js。 。 。 .
// src/i18n.ts
import { createI18n } from '@0disoft/saylo-core';
import { connectDev } from '@0disoft/saylo-vite/client';
import type { AppSchema } from '../generated.js';
import { catalogSource, initialCatalogs, initialLocale, initialNamespaces, timeZone } from 'virtual:saylo/lazy';
export const i18n = createI18n<AppSchema>({
catalogSource, locale: initialLocale, initialNamespaces, initialCatalogs, timeZone,
});
export const disconnect = connectDev(i18n, { catalogSource });
// 정리: disconnect(); i18n.dispose();
开发源是启用推力创建的. 服务器只在已注册的缓存对中发送已更改的对 saylo:catalog-scope 结束 saylo:catalog-push,客户端验证了修改和有效载荷,并一步步应用了显示和缓存。 手动 createDevCatalogSource 选择与 { push: true }; 默认为 false。通过现有的快照和对等检查,恢复了不良数据和空白,以及 stop 财务报告和审定财务报表 dispose 只发布所有者的订阅。 要使用源,你创造自己,通过它作为 createDevCatalogSource(manifest, initialCatalogs, { hot, push: true })。 。 。 .
TS 和 checkJs 消费者加 ["vite/client", "@0disoft/saylo-vite/virtual"] 改为 compilerOptions.types。 。 。 .
virtual:saylo 即刻装入整个目录的急切路径。 创建渴望的商店 initialCatalogs, (中文(简体) ), baseLocale, (中文(简体) ), initialLocale,以及 timeZone 从 virtual:saylo。 。 。 .
同步状态
connectDev 报告开发服务器握手状态 onSyncState(state) 在急躁和懒惰的道路上. state 是被冻结的对象 { status, attempt, maxAttempts: 3 },以及 status 这是其中之一 idle, (中文(简体) ), connecting, (中文(简体) ), retrying, (中文(简体) ), connected, (中文(简体) ), disconnected, (中文(简体) ), failed,或 stopped。 。 。 . attempt 为 1 英寸 connecting, 2 或 3 进 retrying中,最后的尝试值 failed其它州是0个.
在那个 0.1.0-alpha.7 释放,渴望 connectDev 财务报告和审定财务报表 createDevCatalogSource 接受选项 runtime: { schedule, createId }。 。 。 . schedule(milliseconds, callback) 必须在稍后运行回调并返回一等元取消函数 createId() 每个连接必须返回一个独特的字符串。 在省略时,会使用默认的定时器和密码随机值. 正分数 requestTimeoutMs 与核心一样,将数值四舍五入。 懒人桥的计时器配置在 createDevCatalogSource。 。 。 .
connectDev(i18n, {
catalogSource,
onSyncState: state => console.log(state.status, state.attempt),
});
这个状态反映了快照和明显的握手,而不是个人懒惰目录的加载,或者屏幕是否成功渲染. onDiagnostic 继续处理地方文件诊断。 在懒惰的道路上, getSyncState 财务报告和审定财务报表 subscribeSyncState 打开 DevCatalogSource 是可选的方法,因此在此 API 保存之前,类型与外部源的兼容性。 生产没有热闹的环境,如此渴望 connectDev 返回 noop,不调用状态回调。 复试策略不变,默认每请求超时为5000ms.
这个API包含在α.5中,并且没有包含在α.4. 合同的描述见: 开发同步状态。 。 。 .
行为范围
在当前检出中,同步例外 onDiagnostic 不停止翻译更新或装订或其他诊断用户。 同步例外从 DevCatalogSource.subscribeManifest 报告 observer,以及正常的明显接受,更新给其他订阅者,待处理的目录请求仍在继续. 懒桥也忽略了停站后安排的诊断. 诊断回调本身的错误不会通过相同的回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调来调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回调回 这种隔离是α.4放出后的一种变化,被包含在α.5中.
辅助材料,连接 onDiagnostic 财务报告和审定财务报表 onSyncState 从 createSupportRecorder()生产 getReport() 作为JSON,并审查它。 报告只包含错误代码,数字位置,连接状态,并允许最近32起诊断事件的环境版本;它排除了错误文本,文件名,翻译密钥,以及请求ID. 它不自动收集或发送任何东西. clear() 重写记录和状态 。 这个API包含在α.5中,并且没有包含在α.4. 详细的合同和使用情况载于 辅助诊断。 。 。 .
插件会观看文件并只发布有效的目录,客户端会收到快照并传递到应用程序. 如果一个碱性计划更改使得已存在的翻译无效,插件只去除该文件上一个好翻译的无效消息并发布,而缺失的消息会回落到碱性语言值. 无效的翻译编辑保留了该文件的最后好版本,同时对其他文件的修改继续被应用. 没有最后好版本的新翻译文件不发布,删除文件也会去掉其最后好版本. 基或一译被固定后,重新验证并自动恢复. 核心 createStore 财务报告和审定财务报表 replaceCatalogs 不自动孤立; 启动并构建严格验证整个目录。 孤立仅在此插件中发生 。 在生产中, astRuntime 启用时删除 Saylo AST 边界的解析器运行时间, 如果应用程序调用, 解析器仍然包含在内 parseCatalog 直接说 Core和商店不会直接触摸到DOM,因此该应用程序会制作快照来更新屏幕. Vite 不替换应用程序模块 .
安全部门改革用途 @0disoft/saylo-vite/server 财务报告和审定财务报表 virtual:saylo/server。示例在存储器中 安全部门改革实例。 。 。 .
相关软件包
- @ 0disoft/ saylo 核心 —— 说
createI18n - @ 0disoft/ saylo 反应 - 反应约束
- @ 0disoft/ saylo 类型 - dev 类型生成
文档
- 生产建设和安全部门改革
- 更新协议
- 仓库 读取
版本数
支持节点.js 24.x. engines.node 实值 24.x,本地核查环境为节点24.18.0。 它与类型Script 7 和 typescript 不作为同行执行.
运行时间目标为ES2022,运行在Vite开发服务器并构建. 同行要求为Vite 8.
问题和安全报告
发送一般问题、 特性建议和错误到 [email protected] (英语)包含软件包和版本,环境,预期和实际行为,以及从合成数据中构建的最小复制. 将安全问题私下报告给同一电子邮件 Saylo security 主题。 不要发送指使符,密钥,饼干,或真实的用户数据.
如果您安装了Vite 软件包, 您可以在 node_modules/@0disoft/saylo-vite/docs/support.md 财务报告和审定财务报表 security.md。这些指南和软件包的联系元数据包含在α.5中。 早期的α.4焦油丸并不含.
许可证
阿帕奇2.0 (英语). 分布式柏油球包括寄存器根 LICENSE 财务报告和审定财务报表 NOTICE。 。 。 .