用途:Wireit 用于编排 npm 脚本,把编译、打包、测试等任务按显式依赖关系串联,并通过缓存跳过未变更的任务。完整文档见 https://github.com/google/wireit。
主要能力:Wireit 非常静态,依赖必须显式列出,不会从 npm workspace 关系推断。若某任务需在另一任务前执行(如 compile 先于 bundle),就应声明为依赖。依赖可用相对路径,如 "../../other-pkg:script-name"。若仓库中某包把另一包列为 package.json 的 dep 或 devDep,则 compile 应将其作为 wireit 依赖;若某扩展把另一扩展列为 extensionDependency,则 bundle 应将其作为 wireit 依赖。指定 files 和 output(即使 output 为 [])即可获得缓存,两者都未变化时跳过执行。wireit 脚本可以不是 npm 脚本,此时不能单独执行,但可作为其他可从 npm run 启动的 wireit 脚本的依赖运行。不要制造循环引用。环境变量见官方文档。
使用方式:用 WIREIT_CACHE=none 运行命令可避免缓存行为。传递额外参数时用单个 -- 转发,如 npm run build -- --verbose 会把 --verbose 传给 wireit.build.command 中的命令。顶层 compile、lint、test 应覆盖各包中的对应任务,新增包时需更新这些脚本。
限制与注意事项:智能体不应运行不会退出的脚本,包括任何带 --watch 的脚本,以及 service:true 的脚本。wireit 无法跟踪 files 之外的内容,例如手动修改 node_modules 后再运行 compile 或 bundle;例外是 salesforcedx-vscode-services 的 vscode:bundle 会跟踪 node_modules/@salesforce/templates/lib/**。npm link 的包(如指向本地修改库的符号链接)也不被跟踪。若出现 "Unknown error thrown: Error: Did not expect..." 或 "Internal error!",说明另一进程正在运行相同脚本,请自行重跑确认,不要通过清除 .wireit 解决。每个包有各自的 .wireit 缓存,顶层也有一个。