开发工具后端【免费下载链接】napi-rsA framework for building compiled Node.js add-ons in Rust via Node-API项目地址https://gitcode.com/gh_mirrors/na/napi-rs点击查看免费下载本文讲解 napi-rs CLI 中napi artifacts命令的完整用法与底层实现。该命令负责把 CIGitHub Actions上跨平台构建产生的.node/.wasm编译产物按照目标平台归档进对应的 npm 子包目录并同步生成浏览器入口、类型声明等配套文件让产物“开箱即可发布”。读完本文你将掌握该命令的全部命令行参数、编程式 API 调用方式以及其目标核对、WASI 特殊处理、原子化文件写入等内部机制。命令定位连接“构建”与“发布”的中间环节在 napi-rs 的项目发布流程中一条典型流水线是先用napi build在 CI 的多个 runner 上分别编译出各平台的二进制然后由napi artifacts把所有 runner 上传的产物汇总到本地最后用napi prepublish兼容旧名napi prePublish或npm publish完成发布。artifacts命令正是负责“汇总与归档”这一步——官方命令描述为Copy artifacts from Github Actions into npm packages and ready to publish即把来自 GitHub Actions 的构建产物复制进 npm 包目录使其处于可发布状态。该命令的定义由代码生成器维护声明于 cli/codegen/commands.ts 中的ARTIFACTS_OPTIONS对应的帮助文档由 cli/codegen 自动生成即本文所依据的 cli/docs/artifacts.md文件头部标注“Do not edit this file manually”而命令的实际行为实现在 cli/src/api/artifacts.ts 的collectArtifacts函数中。用法两种调用方式1. CLI 方式napi artifacts [--options]所有选项均为可选项不带任何参数时使用默认配置即可在标准布局./artifacts输出目录 npm子包目录 根目录package.json下完成归档。2. 编程式 APIimport { NapiCli } from napi-rs/cli new NapiCli().artifacts({ // options })编程式调用的参数接口ArtifactsOptions定义于 cli/src/def/artifacts.ts其applyDefaultArtifactsOptions会在用户未传参时填入默认值见同文件 cli/src/def/artifacts.ts。Options 全表与逐项详解OptionsCLI Optionstyperequireddefaultdescription--help,-hget helpcwd--cwdstringfalseprocess.cwd()The working directory of where napi command will be executed in, all other paths options are relative to this pathconfigPath--config-path,-cstringfalsePath tonapiconfig json filepackageJsonPath--package-json-pathstringfalsepackage.jsonPath topackage.jsonoutputDir--output-dir,-o,-dstringfalse./artifactsPath to the folder where all built.nodefiles put, same as--output-dirof build commandnpmDir--npm-dirstringfalsenpmPath to the folder where the npm packages putbuildOutputDir--build-output-dirstringfalsePath to the build output dir, only needed when targets contain a WASI target--cwd命令的工作目录其余所有路径选项都相对它解析。默认取process.cwd()。它同时参与“包边界”的判定——源码会在cwd与package.json所在目录之间确定一个可管理的文件系统边界防止命令误伤边界外的文件详见 cli/src/utils/misc.ts 的resolvePackageReconciliationPaths。--config-path,-c指向napi配置 JSON 文件的路径。配置中可以声明binaryName、targets、wasm等字段。例如仓库示例 examples/napi/package.json 中即以内嵌napi字段的方式配置了binaryName: example与targets: [wasm32-wasip1, wasm32-wasip1-threads]。若不指定则从packageJsonPath指向的package.json中读取内嵌的napi配置。--package-json-path默认package.json。命令从该文件读取name决定 npm 包名、main决定根入口候选以及内嵌的napi配置。--output-dir,-o,-d默认./artifacts。与napi build的--output-dir保持一致——即 CI 各平台 runner 把编译好的.node/.wasm文件放进的那个目录。命令会递归扫描该目录下的所有.node与.wasm文件自动跳过node_modules见 cli/src/api/artifacts.ts。--npm-dir默认npm。归档产物的目标目录其下会按platformArchABI如linux-x64-gnu、win32-x64-msvc、darwin-arm64、wasm32-wasi建立子目录每个子目录对应一个待发布的平台子包。--build-output-dir仅当targets中包含 WASI 目标时才需要。WASI 构建除了产出.wasm二进制外还会生成 loader 与 worker 等配套 JS 文件这些文件可能并不在--output-dir下而是由构建命令单独输出该参数用于指明它们的所在目录。若未指定命令会回退到在“产物文件所在目录”与cwd中查找见 cli/src/api/artifacts.ts 的候选目录逻辑。底层执行流程一次完整的归档是怎么发生的collectArtifactscli/src/api/artifacts.ts在拿到用户选项后依次执行以下关键步骤路径解析与边界确认通过resolvePackageReconciliationPaths规范化cwd、package.json与npmDir的绝对路径找出“可被命令管理的文件系统边界”防止写入或删除越过包边界。读取配置调用readNapiConfig解析出targets目标三元组列表、binaryName二进制基名、packageName与packageJson。递归收集产物collectNodeBinaries从outputDir递归收集所有.node/.wasm文件并按“产物身份”聚合。产物身份的命名规则在artifactNamecli/src/api/artifacts.ts中定义{binaryName}.{platformArchABI}.{extension}其中 WASI/WASM 平台扩展名为.wasm其余平台为.node。例如binaryName为example时linux x64 gnu 产物即example.linux-x64-gnu.nodeWASI 产物为example.wasm32-wasi.wasm。写入规划所有待写文件先以destination - {content, source}的形式收集进pendingWrites若同一目标被两个不同内容的源文件写入会直接报Conflicting artifacts target错误见addPendingWritecli/src/api/artifacts.ts。根入口处理addArtifactRootEntry会根据package.json的main字段或回退到index.js把 JS 根入口从产物目录复制到包根目录WASI 目标则通过 loader 首行内嵌的元数据WASI_ARTIFACT_METADATA_PREFIX确定托管根入口。原子化提交commitArtifactReconciliation先在系统临时目录创建 staging 区写入全部内容再通过文件系统事务一次性提交cli/src/api/artifacts.ts避免中途失败留下半成品状态。严格的目标核对防止发错包、漏包或重复artifacts命令内置了三层校验全部位于 cli/src/api/artifacts.ts重复身份校验rejectDuplicateArtifactIdentities第 898 行发现同一binaryName.platformArchABI.ext身份对应多个文件时直接报错并提示“确保合并后的 CI 产物中每个配置目标只有一个构建或收窄--output-dir”。这能拦截 CI 合并产物时因路径冲突导致的同目标多份二进制。未配置目标的产物校验若outputDir中存在不属于targets的产物同时也不是 universal 二进制的组成源抛出Artifacts were found for unconfigured targets。防止把某个平台意外构建的二进制一并发布。缺失目标校验若配置的某个目标没有对应产物抛出Missing artifacts for configured targets并同时清理该目标在packageRoot与npmDir下遗留的旧文件removeTargetDestinations避免发布一个“看起来完整但实际缺平台包”的版本。此外命令还会对比“本次将要写入的文件”与npmDir各子包目录、包根目录中已存在的受管文件把不再需要的陈旧文件清理掉collectStaleManagedDestinations第 737 行但outputDir中已存在的普通文件会被收集进protectedSourcePaths保护绝不会被误删第 111-113 行。WASI 目标的特殊处理当targets中包含wasm32-wasi系列目标时归档逻辑远比原生平台复杂loader 文件组每个 WASI flavor 需要一组配套文件由requiredWasiFilescli/src/api/artifacts.ts确定{binaryName}.{suffix}.cjs、{binaryName}.{suffix}.d.cts、{binaryName}.{suffix}-browser.js带线程的 flavor 额外需要wasi-worker.mjs与wasi-worker-browser.mjs非线程 flavor 则换成{binaryName}.{suffix}-deferred.js与-deferred.d.ts。loader 后缀规则wasiLoaderSuffixcli/src/utils/target.ts从platformArchABI去掉wasm32-前缀得到后缀——例如wasm32-wasi得到wasi历史遗留命名wasm32-wasip1得到wasip1因此对应的 loader 文件名分别为example.wasi.cjs与example.wasip1.cjs。源码完整性校验findWasiArtifactSource会在候选目录--build-output-dir→ 产物目录 /cwd中寻找“完整的一组 loader 文件”一旦某个候选目录包含部分文件却又不完整立即报Incomplete artifact source found防止把旧版本地输出与新版 CI 产物混在一起第 353-393 行。浏览器入口重写复制-browser.js时会把其中的new URL(./wasi-worker-browser.mjs, import.meta.url)改写为指向实际发布包名{packageName}-{platformArchABI}/wasi-worker-browser.mjs保证浏览器端 worker 在发布后能正确解析第 254-263 行。这一行为有对应的单元测试验证见 cli/src/api/tests/artifacts.spec.ts测试在临时目录中构造 WASI 产物与buildOutputDir调用collectArtifacts({ cwd, buildOutputDir: build-output })后断言.wasm、loader、worker 及重写后的浏览器入口都正确落入npm/wasm32-wasi/目录。在 CI 中的典型组合用法artifacts通常不与build同机执行构建在各平台 runner 上并行完成并上传产物artifacts在发布机上汇总。一个典型流程是# 1. 在发布机上下载所有平台 runner 上传的产物到 ./artifacts # 2. 汇总归档到 npm/ 目录并核对目标完整性 napi artifacts # 3. 更新各平台子包版本号可选 napi version # 4. 更新 package.json 并准备发布 napi prepublish由于命令默认读取根目录package.json中内嵌的napi配置binaryName、targets无需在命令行重复声明目标列表归档目录结构完全由配置驱动。仓库中的 examples/napi/package.json 与 examples/napi-cargo-test 等示例项目均采用这种配置化布局可作为实际项目的参照。小结napi artifacts是 napi-rs 发布链路中“构建”与“发布”之间的枢纽它以package.json的napi配置为唯一事实来源把散落在./artifacts的跨平台二进制按binaryName.platformArchABI.ext命名规范归档进npm/平台子包同时完成 WASI loader 配套、浏览器入口重写、根入口同步、陈旧文件清理与三层目标完整性校验并以临时目录 staging 文件系统事务的方式原子化落地。理解其参数与内部校验逻辑可以帮助你在 CI 发布流水线中快速定位“缺平台包”“产物重复”“WASI 文件不全”等典型问题。赞分享开发工具后端【免费下载链接】napi-rsA framework for building compiled Node.js add-ons in Rust via Node-API项目地址https://gitcode.com/gh_mirrors/na/napi-rs点击查看免费下载相关推荐MediaPipe快速上手指南5分钟让设备端跑起人脸、手势与姿态检测MediaPipe快速上手指南5分钟让设备端跑起人脸、手势与姿态检测 你的应用需要实时的人脸检测、手势识别或姿态跟踪但又不想自己折腾模型部署MediaPi开发工具后端Mac鼠标优化终极指南让普通鼠标在macOS上获得触控板般流畅体验Mac鼠标优化终极指南让普通鼠标在macOS上获得触控板般流畅体验 还在为Mac上第三方鼠标的糟糕体验而烦恼吗Mac Mouse Fix是一款开源免费的 M桌面应用系统编程3分钟掌握IPTV播放源检查iptv-checker让你的电视直播永不掉线3分钟掌握IPTV播放源检查iptv checker让你的电视直播永不掉线 你是否经常遇到IPTV播放源突然失效需要手动更换频道的困扰iptv check后端任务调度音视频创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
面试总踩同一个坑?用这个AI工具做深度复盘,下次直接拿Offer 一、为什么你的面试总是重复犯错?你有没有过这样的经历:一场面试结束后,脑子里只剩下“聊得还行”或者“感觉不太好”这种模糊印象。面试官问了哪些关键问题?你当时是怎么回答的?哪些地方可以说得更好?这些… · 2026/9/27 7:59:36
搞懂wordpress目的与完整流程:从备案避坑到安全加固 搞懂wordpress目的与完整流程:从备案避坑到安全加固 备案流程一头雾水?很多老板在准备上线WordPress网站时,卡在第一步就懵了。别慌,我做了十年网站安全与建设,见过太多因为不懂“wordpress目的”而踩坑的案例。今天不整虚的… · 2026/9/27 7:59:36
WPScan 动态指纹识别实战:基于 CHANGELOG.md 的 WordPress 插件版本探测机制解析 网络安全漏洞扫描渗透测试应用安全CLI 【免费下载链接】wpscan WPScan WordPress security scanner. Written for security professionals and blog maintainers to test the security of their WordPress websites. Contact us via contactwpscan.com 项目地址: ht… · 2026/9/27 7:59:24
Yao SUI 国际化(i18n)完整指南:翻译标记、语言包目录与 locale 检测机制 Agent 框架后端低代码RAG 【免费下载链接】yao ✨ All your agents and workspaces in one place, on every device you own. Track tasks on a board, accessible from desktop, mobile, browser, or API. Self-hosted. 项目地址: https://gitcode.com/gh_mirrors/… · 2026/9/27 8:47:43
架构决策记录(ADR)在大型分布式系统重构中的落地 架构决策记录(ADR)在大型分布式系统重构中的落地在大型分布式系统演进的过程中,每一个接手遗留系统的研发人员都会经历这种时刻:看到一段极其诡异的代码逻辑或架构选型,去问老员工,老员工说“这是前年某某架… · 2026/9/27 8:47:43
深圳设计功能网站别乱选,源码下载后这3个坑能省2万 深圳设计功能网站别乱选,源码下载后这3个坑能省2万 备案流程一头雾水,是深圳很多中小企业建站时最容易卡壳的地方。很多人以为找个外包公司做网站,交钱就能万事大吉,结果最后卡在ICP备案上,或者网站上线后因为缺少源码,被服务商“卡脖子”。… · 2026/9/27 8:47:37
网站被黑挂马别慌!揭秘网络广告的缺点与免费工具自救指南 网站被黑挂马别慌!揭秘网络广告的缺点与免费工具自救指南 你的网站突然被挂马,页面弹出博彩广告,后台数据一片空白,这时候你该找谁?别急着打电话给那些报价五万的“安全专家”,先别慌。我干这行十年,见过太多老板因为不懂技术,被各种“安全加固”名目… · 2026/9/27 8:47:31
Penrose Style Collectors 深度指南:在 Style 语言中实现跨匹配聚合 开发工具数据可视化 【免费下载链接】penrose Create beautiful diagrams just by typing notation in plain text. 项目地址: https://gitcode.com/gh_mirrors/pe/penrose 点击查看 免费下载 Collectors(收集器)是 Penrose Style 语言中一类… · 2026/9/27 8:47:25
BFS算法解决FloodFill问题 BFS算法解决FloodFill问题图像渲染岛屿数量岛屿的最大面积被围住的区域图像渲染 题目解析:就是将这里面指定一个元素将其上下左右和这个一样的值,全部修改成另外一个值,并且其上下左右也可以进行上下左右进行扩展,也就是将这个一片… · 2026/9/27 8:47:25
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01