云工模式又出 动态资源.mjs,汇隔离入口、宿主与句柄之源码,兼值桥 Wasm 字节,以备动态载器;又附文件式程序之隔离运行入口 隔离运行客.mjs 与浏览器编器宿主 编译宿主.mjs(内存文件系与 执行模块),以供[隔离运行公约](../../../豫言操作系统接口/隔离运行/规范.文言.md)之云工适配。实务唯书豫言;用 Loader 者,许可书之 LOADER 当列其名,Wrangler 须置 worker_loaders。同号 get 之码与限额须恒同。
此器以豫言书之。取应用豫言稿,编为 WasmGC,依编译器核心之结构径书值桥,抄浏览器或云工库中固定 JS 外壳。外壳唯载器、传能,应用之法悉在豫言。
自动模式(宜先用)
构一云工或浏览器之应用,一令足矣:器自读应用之包描述,循依赖而尽取其闭包,于每 豫言操作系统XXX 接口择适配而绑之,书包上下文,构应用,终封接口之清单。不必手书包上下文,亦不必逐一行 yy豫言操作系统绑定。
node 豫言操作系统/宿主/节点/宿主.cjs yy双宿主构建.wasm --自动 <云工|浏览器> <应用目录> <输出目录> \
[--包根 <目录>]… [--许可 <文件>|-] [--命名入口 <名>] [--编译器 <路径>] [--类型检查]
构建根:行于「构建根」之目录。构建根者,含 库/(标准库与内置基础库)、豫言操作系统接口/、豫言操作系统/(适配/、宿主/、装载/),并已成之 yy4_bs.wasm(或 --编译器 所指者)、yy豫言操作系统接口检查、yy豫言操作系统绑定、yy豫言操作系统装载包 之目录也。语言仓根本身即构建根,云仓之 dist/构建源码 亦然。诸目录可为指向语言仓之符号链接:器以规范化(解符号链接后)之实径书包上下文,盖包上下文须规范绝径,且编译缓存以径计,同一源码唯可以一径见也。
参数(选项可书于位置参之前、之间、之后):
云工|浏览器:宿主之模。应用目录:含入口。豫与恰一包描述之目录。输出目录:产物之目录;构建前先删之(见「产物与临时文件」之安检)。--包根 <目录>:可重复,指诸库包所在之目录(递归以寻),唯认<包名>。包。豫。目录相对构建根,亦可书绝径;同一文件经数包根而重见者,只算其一。--许可 <文件>|-:云工模之许可文件;缺则取<应用目录>/许可.json(有则用),否则不用;-明示不用。浏览器模不用许可文件,给之则拒。--命名入口 <名>:唯云工模用,同旧式之第七参(须为 ASCII 标识符)。--编译器 <路径>:缺省./yy4_bs.wasm;名无斜杠者补./。--类型检查:唯对入口验类(编译器加--type-check-only --parallel -j 24,诊断直出于终端),不出产物,不装清单。- 编译器恒加
--parallel -j 24(构建并行不少于二十)。--帮助陈二式之用法。
所行(依次):
- 应用目录须恰有一
*。包。豫,读其名称、所有者与依赖;无之,则须恰有一*。包。豫.txt(语言仓一致性验证之目录,以包描述存为.txt,免为全仓库包发现误认为包):此时复制应用目录于dist/.自动构建/<输出名>/应用,并改.txt为原名,此后以副本为应用目录。 - 循依赖而尽取其闭包:
标准库与内置基础库(单元测试、癸象工具、网页客户端、云工宿主、浏览器宿主)内置;豫言操作系统XXX谓操作系统接口XXX;余依赖,于诸--包根中寻恰一<名>。包。豫,无则告,多则告(明包名、何者所依、所搜之包根或诸候选),并递归解其依赖;有环则以已访之表截之。库与应用之序:依赖在前,应用居末;接口依名之字节序,不随依赖声明之序与包根之序,故产物可复现。诸包所有者须为「豫言」,依赖须为平铺之名列,包名与接口名不得空、不得为.、..,亦不得含斜杠、反斜杠、制表与换行。 - 每接口
XXX:接口目录豫言操作系统接口/XXX(恰有一*。接口。豫模块);适配目录依宿主之模取其先存在者:云工模豫言操作系统/适配/XXX云工、XXX,浏览器模XXX浏览器、XXX;先删旧dist/操作系统绑定/XXX,后行./yy豫言操作系统绑定 <接口包描述> <适配包描述> <适配实现模块> dist/操作系统绑定/XXX。无适配则告,并示他宿主之适配存否。 - 书包上下文于
dist/.自动构建/<输出名>/包上下文(一行一包:标准库、诸内置基础库、诸接口绑定包、诸库、应用;径皆规范绝径,字段以真制表符隔之)。 - 以旧式之同一函数构建(同进程,不另启本器):
<模> <应用目录>/入口。豫 <输出目录> <编译器> <包上下文> <许可文件或->,可加命名入口。 - 行
./yy豫言操作系统装载包 <输出目录> dist/操作系统绑定/<诸接口>…,书接口要求组.json与宿主提供组.json。
产物与临时文件:
<输出目录>:先删后建。安检:其末段不得为空、.、..;已存在者须为目录;不得在dist/.自动构建之内;不得等于构建根、应用目录、任一包根,亦不得为其上级目录。dist/操作系统绑定/<接口名>/:接口绑定包,每次构建皆重绑。dist/.自动构建/<输出名>/:所书之包上下文(可以复查)与.txt描述时之应用/副本。云仓与语言仓皆已忽略/dist/。
误告:皆以中文书之,明其因。含:当前目录非构建根;缺工具或文件;应用目录无包描述或有多个;包描述格式不对(带文件名与病因);依赖包不得、候选有多、名称或所有者不符;接口无适配;输出目录不安全;外部命令败(带命令行与退出码,编译败者兼附编译器之输出)。败则退出码一。
与旧式之关系:旧式(下节)不变,云仓构建程序仍用之。自动模式终以同一构建函数行之,同一包上下文之下,整个输出目录与旧式逐字节相同;与手写配方之异,唯:直读工作树之库源(不复 rsync 于暂存)、接口清单中接口依名排序、包上下文行序有别(行序不影响 程序.wasm)。
例:
# 云工:云工作台用户目录持久对象(云仓;于构建根中,包根书绝径)
node 豫言操作系统/宿主/节点/宿主.cjs yy双宿主构建.wasm --自动 云工 $C/应用/豫言云工作台/用户目录应用 dist/云用户目录 \
--包根 $C/应用/豫言云工作台/库 --包根 $C/库
# 浏览器:包服务阅读页
node 豫言操作系统/宿主/节点/宿主.cjs yy双宿主构建.wasm --自动 浏览器 $C/应用/包管理服务/阅读应用 dist/阅读应用 --包根 $C/应用/包管理服务/库
# 语言仓一致性验证(.txt 描述,无需包根),产物 dist/日志一致性
node 豫言操作系统/宿主/节点/宿主.cjs yy双宿主构建.wasm --自动 云工 豫言操作系统/适配/日志/一致性验证/应用 dist/日志一致性
须知:编译缓存之目依编译器 .wasm 之径与修改之时,数构建同用一编译器则共其缓存,亦共 dist/操作系统绑定,勿并行。已知之限:唯支持所有者为「豫言」之包;依赖须为平铺之名列;接口逐一绑之(不并行);编译败时,编译器之全部输出原样带回,颇长。
构建本器:于构建根书一仅含标准库、单元测试、癸象工具与本包之包上下文(径须规范绝径,故用 pwd -P),而以稳定编译器编之(云仓构建程序亦如此构之):
R=$(pwd -P)
printf '豫构包上下文二\n豫言\t标准库\t%s/库/标准库/标准库。包。豫\n豫言\t单元测试\t%s/库/单元测试/单元测试。包。豫\t豫言\t标准库\n豫言\t癸象工具\t%s/库/癸象工具/癸象工具。包。豫\t豫言\t标准库\t豫言\t单元测试\n豫言\t双宿主构建\t%s/豫言操作系统/应用/双宿主构建/双宿主构建。包。豫\t豫言\t标准库\t豫言\t单元测试\t豫言\t癸象工具\n' $R $R $R $R > 双宿主构建上下文
node 豫言操作系统/宿主/节点/宿主.cjs yy_bs_stable.wasm 豫言操作系统/应用/双宿主构建/入口。豫 --package-context 双宿主构建上下文 --do-not-load-cache -o yy双宿主构建.wasm
单元测试(纯函数之部:包描述之解析、依赖之解析、包上下文之书、接口适配之择、命令行之析):于语言仓根行 node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 双宿主构建 <测试名> --输出 yy双宿主构建测试.wasm,再以同一宿主行其产物。测试名依次为 文本工具。测试、包描述。测试、依赖解析。测试、上下文生成。测试、接口适配。测试、自动参数。测试、宿主构建。测试;例如 node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 构建 双宿主构建 包描述。测试 --输出 yy双宿主构建包描述测试.wasm && node 豫言操作系统/宿主/节点/宿主.cjs yy双宿主构建包描述测试.wasm。亦可以编译器直编:node 豫言操作系统/宿主/节点/宿主.cjs yy3_bs.wasm 豫言操作系统/应用/双宿主构建/包描述。测试。豫 --package-context 双宿主构建上下文 --parallel -j 24 -o yy双宿主构建包描述测试.wasm,包上下文同上「构建本器」所书。
旧式
先成 yy双宿主构建,于仓根以六参行之:模式、源码、产物目录、编译器、包上下文、许可文件;第七参可命云工服务入口。模式称「浏览器」或「云工」;浏览器许可传 -。云工许可书按 KV、R2、D1、SERVICE、DO、ASSETS、QUEUE、EMAIL 列可授绑定。云工之 入口.mjs 可作 Wrangler 主入口,同一豫言 Wasm 可受 fetch 或 queue 之事;浏览器则呼 启动豫言浏览器应用()。编应用时禁旧缓存,以防共享工作树旧物混入;此器不立部署配置,亦不改云仓。
云工第七参若为 CloudModel,构建器出同名 WorkerEntrypoint,其请以 service-fetch 事入豫言;公域默认请仍以 fetch 入。Wrangler 可以 entrypoint: CloudModel 指服务绑定。Wrangler 4.129.0 本地同 Worker 绑定已验二路异应;非法别名见拒。自定 RPC 法、多个别名及云上部署待补。详 Cloudflare 命名入口文档。
浏览器产物又有 自动启动.mjs。页载 <script type="module" src="/产物/自动启动.mjs?标识=应用根"></script>,无需别书调用 JS;有 id="应用根" 始取 Wasm 而启之。省标识则即启。真 Chrome 已验有标则行豫言、无标则略之且不取 Wasm。若欲自主持客器之寿,仍可呼 入口.mjs 所出之明启函数。
浏览器产物并抄 工作线程自动启动.mjs。工客豫言源若别于页客,宜构于页产物子目录;页客以子目录壳之相对址造工。壳于 Dedicated Worker 内载同目录二 Wasm;工客先以自身柄听主信,继以豫言回信。真 Chrome 已验页、工皆为豫言 Wasm 而初信与回信往还。
云工 入口.mjs 又出通用 豫言持久对象 类,可于 Wrangler 持久对象绑定及 SQLite exports 引之。类之外层分派 fetch、alarm 唯属宿主,实务之断与久态读写由同一豫言 Wasm 行之;构建器仍不代应用立 Wrangler 配置。
云工之模又读应用目录(入口。豫 所在)之可选文 执行配置.json,析为 JSON 而规整之,书为产物 动态资源.mjs 之导出常量 执行配置,无文则书 {}(JSON 非法则构建败)。其文惟调各事类之墙钟时限(如 {"事件时限毫秒":{"durable-alarm":900000}}),非属 许可.json,亦不易许可依绑定种类之结构;产物之 入口.mjs 于加载时验之而用之,配置非法则 Worker 加载败。入口壳以命名空间导入读此导出,故新旧之壳与新旧之构建器可相混而用(缺此导出则守默认时限)。其式、默值与上限见 豫言操作系统/宿主/云工/说明.文言.md。
构建器每召编译器,恒加 --parallel -j 24,二十四路并行,验类与终链皆速(实测验类自约四十秒减至约十八秒)。同缓存一时唯一构建可用,勿并行多构建共缓存。