新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 @napi-rs/cli 的 rename 命令重命名 napi-rs 项目:选项详解与源码级工作原理

发布时间:2026/9/27 8:04:45来源:尧图网络
使用 @napi-rs/cli 的 rename 命令重命名 napi-rs 项目:选项详解与源码级工作原理
开发工具后端【免费下载链接】napi-rsA framework for building compiled Node.js add-ons in Rust via Node-API项目地址https://gitcode.com/gh_mirrors/na/napi-rs点击查看免费下载导读napi rename是 napi-rs/cli 提供的一条项目级重命名命令用于在保持 napi-rs 项目结构完整的前提下一次性更新package.json、NAPI 配置文件、Cargo.toml、WASI 绑定产物、平台分包与 GitHub Actions 工作流中的项目名、二进制名、包名、仓库地址和描述。本文以官方命令文档 cli/docs/rename.md 为主线结合 rename 命令实现 与 rename 核心逻辑 的源码说明每个选项的作用、默认值与底层行为帮助你安全地在现有 napi-rs 项目上执行重命名并理解其托管文件同步重命名 引用文本精准替换 事务式提交的工作原理。说明cli/docs/rename.md由cli/codegen自动生成本文档内容与命令定义保持同步不建议手动编辑。rename 命令的两种使用方式rename命令提供两种调用方式命令行CLI与编程式 API。命令行方式napi rename [--options]在终端中直接运行napi rename --help可查看完整帮助该场景在仓库的 e2e 测试 cli/e2e/cli.spec.ts 中亦有覆盖。编程式方式import { NapiCli } from napi-rs/cli new NapiCli().rename({ // options })编程式调用与命令行等价选项对象中的字段名对应下表左侧的 Options 列。命令行选项定义位于 cli/src/def/rename.ts其中BaseRenameCommand通过Option.String(...)声明全部参数并定义了RenameOptions接口与applyDefaultRenameOptions默认值注入函数。交互式输入兜底从 cli/src/commands/rename.ts 可以看到一个易被忽略的行为如果调用时未提供任何显式重命名选项name、binaryName、packageName、repository、description均为空命令会通过inquirer/prompts依次询问Enter the new package name in the package.json必填Enter the new binary name必填然后将交互结果作为name与binaryName传入renameProject(options)。也就是说napi rename可以不携带任何参数直接运行进入交互式引导流程。选项一览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.jsonnpmDir--npm-dirstringfalsenpmPath to the folder where the npm packages putname--name,-nstringfalseThe new name of the projectbinaryName--binary-name,-bstringfalseThe new binary name *.node filespackageName--package-namestringfalseThe new package name of the projectmanifestPath--manifest-pathstringfalseCargo.tomlPath toCargo.tomlrepository--repositorystringfalseThe new repository of the projectdescription--descriptionstringfalseThe new description of the project各选项的源码级行为cwd默认process.cwd()命令执行的根工作目录所有其他路径类选项configPath、packageJsonPath、npmDir、manifestPath都相对它解析。在 cli/src/api/rename.ts 中所有路径都会经过resolveCanonicalFile/resolveCanonicalRoot规范化并用assertPathWithin强制检查不得逃逸出项目根目录防止重命名操作意外写入项目之外的路径。configPath--config-path, -c指向napi配置文件如napi.json。若提供重命名时updateNapiConfigRecord会同步更新其中的binaryName与packageName字段特别地当设置binaryName时会同时删除旧的name字段见 cli/src/api/rename.ts 中的updateNapiConfigRecord避免新旧配置字段并存导致歧义。packageJsonPath默认package.jsonpackage.json清单路径。重命名事务会重写该文件并在其napi配置块中同步写入新的binaryName/packageName。npmDir默认npm平台分包存放目录。每个目标平台的子包以{packageName}-{platformArchABI}命名例如scope/original-win32-x64-msvc改名时会按此命名规则整体平移见createManagedPackageRenames。name--name, -n项目新名称写入package.json的name字段。校验采用 npm 官方命名规则assertValidNpmPackageName严格模式超过 214 字符、含大写字母、含~!()*等特殊字符、与 Node 核心模块重名等都会触发警告或报错。binaryName--binary-name, -b新的二进制名即*.node文件与 WASI 产物*.wasm、loader 等的文件名前缀。校验为assertSafeBinaryName必须是非空字符串、不能是./..、不能含路径分隔符与:/\\|?*、不能以.结尾、不能是 Windows 保留文件名con、prn、aux、nul、com1-com9、lpt1-lpt9。重命名时同时更新Cargo.toml中的package.name通过sanitizeCargoPackageName将非法字符替换为_并转小写与 CI 工作流中的env.APP_NAME。packageName--package-name新的 npm 包名。会按每个编译目标校验{packageName}-{platformArchABI}这一组合名是否合法validatePackageIdentity并同步重写各平台子包的package.json与 README。manifestPath默认Cargo.tomlCargo 清单路径仅当binaryName变化时被改写。repository新的仓库地址。若package.json中repository已是对象则只更新其url字段并保留type等其余字段否则直接写入字符串该行为在 cli/src/api/tests/rename.spec.ts 的repository updates package.json when provided用例中有断言。description新的项目描述写入package.json的description字段。rename 到底改了什么托管文件与引用重写napi rename并非简单地把package.json的name字段替换掉而是把整个 napi-rs 发布链路中所有与旧名字绑定的内容作为一个整体进行迁移。核心逻辑集中在 cli/src/api/rename.ts约 1665 行可以分为以下层面。1. 托管文件重命名Managed File Renames当binaryName变化时createManagedWasiFiles会枚举出全部由 CLI 生成的 WASI 绑定文件包括${binaryName}.wasm、${binaryName}.debug.wasm${binaryName}.{platformArchABI}.wasm、${binaryName}.{platformArchABI}.debug.wasm${binaryName}.{loaderSuffix}.cjs、.d.cts、-browser.js无线程目标额外生成的.wasm.d.ts、.wasm.d.mts、.workerd.mjs、.workerd.d.mts、-deferred.js、-deferred.d.tscreateManagedWasiRenames将这些{oldName}.xxx文件一一映射为{newName}.xxx并在项目根目录与每个 WASI 平台子包内执行重命名。preflightManagedFileRenames在动手前会做冲突预检同一源文件不得有多个目标、同一目标不得被多个源指向、目标已存在且非同一文件时直接报错。当packageName变化时createManagedPackageRenames生成{oldPackageName}-{platformArchABI} → {newPackageName}-{platformArchABI}的包名映射用于重写各平台子包。2. 清单与引用文本重写rewritePackageManifest负责重写package.json覆盖范围远超name字段main、module、browser、types、exports、files、imports等PACKAGE_REFERENCE_FIELDS中的路径引用包括./前缀的相对文件引用bin字段dependencies、devDependencies、optionalDependencies、peerDependencies、peerDependenciesMeta、bundledDependencies等依赖字段中的包选择器且支持npm:与patch:前缀描述符overrides、resolutions等递归键scripts中的命令行字符串rewriteScriptCommand能正确解析引号、管道、逻辑运算符等 shell 语法只替换作为独立参数的引用publishConfigpnpm配置块中的overrides、patchedDependencies、packageExtensions、peerDependencyRules、updateConfig等键。此外replaceManagedTextReferences还会对仓库中的托管文本文件根目录与平台子包内的 WASI loader、绑定入口、.gitattributes等做全文引用替换——替换时检查前后字符边界避免把新名字误替换进更长的标识符内部.wasm二进制文件则原样搬运不做文本替换。3. 配置与构建文件的联动NAPI 配置文件同步binaryName/packageName设置binaryName时删除旧name。Cargo.tomlpackage.name更新为 sanitize 后的新二进制名非法字符转_、转小写。GitHub Actions.github/workflows/CI.yml若存在且包含env.APP_NAME则同步更新为新二进制名。各平台子包重写每个npm/{platformArchABI}/package.json与 READMEREADME 若恰好是 CLI 生成的模板文本会按新包名重新生成。4. 事务式提交保证一致性所有变更先被收集到RenameTransactionPlanwrites 与 removals随后executeRenameTransaction在系统临时目录napi-rename-stage-*中暂存所有待写内容再通过commitFileSystemTransaction一次性提交最后清理临时目录。这种先规划、后提交的设计让重命名过程要么全部生效、要么整体失败避免出现文件改了一半的中间状态同时通过withPackageFileSystemReconciliation与revalidateRenameReconciliationPaths对路径做加锁式校验若重命名期间路径被外部改动ESTALE会直接中止。校验规则与可验证行为rename对名称合法性的校验相当严格全部实现在 cli/src/api/rename.tsnpm 包名不能为空、不能以./_开头、不能含首尾空格、只能含 URL 友好字符、小写、不超过 214 字符、不能是保留名如node_modules、favicon.ico、避免与 Node 核心模块重名、~!()*等字符仅提示警告。二进制名必须是安全的文件名词干拒绝路径穿越、控制字符与 Windows 保留文件名。仓库中的 cli/src/api/tests/rename.spec.ts 提供了三个可直接验证上述行为的集成测试omitting binaryName keeps existing wasi artifact names and binary references只传入name而不传binaryName时WASI 产物文件、.gitattributes、CI.yml的APP_NAME与Cargo.toml均保持原样证明只改项目名不动二进制名是安全的omitting binaryName preserves separated napi config fields配置在独立napi.json中时未指定binaryName不会误删或改写原有binaryName/packageName字段repository updates package.json when provided传入repository时对象形式的repository.url被更新且保留type等其他字段。实践建议只改 npm 项目名napi rename --name new-name或交互式运行napi rename此时二进制名、WASI 产物与 Cargo 包名均不受影响。同步改二进制名追加--binary-name new-binary此时 WASI 产物文件、.gitattributes、CI 的APP_NAME、Cargo.toml会一起迁移。改名 npm 平台分包追加--package-name new-package各npm/{platformArchABI}子包将按{newPackageName}-{platformArchABI}整体重命名并重写其package.json与 README。多平台项目请先确认 targets 组合名的合法性packageName会按每个目标组合校验若某个{packageName}-{platformArchABI}不合法会在执行前报错。重命名是破坏性操作建议在提交干净的 Git 工作区后执行并检查 diff尤其关注scripts与exports这类引用密集的字段。编程式使用在 CI 或脚本中调用new NapiCli().rename({...})可跳过交互提示直接传入所需选项对象。相关文档rename 命令文档本文主体由 codegen 生成rename 命令实现含交互式输入逻辑rename 参数与接口定义RenameOptions与默认值rename 核心实现校验、引用重写与事务提交rename 集成测试可验证的边界行为CLI 命令总览new、build、artifacts、universalize等命令入口赞分享开发工具后端【免费下载链接】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 version 命令深度解析一键同步各平台 npm 包的版本号napi rs CLI napi version 命令深度解析一键同步各平台 npm 包的版本号 napi version 是 napi rs 官方 CLI开发工具后端napi-rs 的 napi new 命令一行命令生成预配置的 Rust Node-API 脚手架工程napi rs 的 napi new 命令一行命令生成预配置的 Rust Node API 脚手架工程 导读 本篇文章围绕 napi rs CLI 的 n开发工具后端3分钟掌握IPTV播放源检查iptv-checker让你的电视直播永不掉线3分钟掌握IPTV播放源检查iptv checker让你的电视直播永不掉线 你是否经常遇到IPTV播放源突然失效需要手动更换频道的困扰iptv check后端任务调度音视频上一篇CNTK 图像分类实战用 Python 从零构建卷积神经网络ConvNet下一篇2025新范式Flowgram.ai如何用AI重构工作流开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

featuretools API 参考全指南:从演示数据集到深度特征合成与特征工程的完整接口地图 2026/9/27 8:48:24

featuretools API 参考全指南:从演示数据集到深度特征合成与特征工程的完整接口地图

特征工程机器学习数据科学 【免费下载链接】featuretools An open source python library for automated feature engineering 项目地址: https://gitcode.com/gh_mirrors/fe/featuretools 点击查看 免费下载 本篇指南以 featuretools 官方 API Reference&#xff…

阅读更多 →
基于 Boto3 实战 AWS HealthImaging:DICOM 影像集与影像帧处理全流程详解 2026/9/27 8:48:23

基于 Boto3 实战 AWS HealthImaging:DICOM 影像集与影像帧处理全流程详解

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

阅读更多 →
TypeGraphQL 类型与字段:用类与装饰器声明 GraphQL Object Type 2026/9/27 8:48:23

TypeGraphQL 类型与字段:用类与装饰器声明 GraphQL Object Type

后端GraphQLAPI设计 【免费下载链接】type-graphql Create GraphQL schema and resolvers with TypeScript, using classes and decorators! 项目地址: https://gitcode.com/gh_mirrors/ty/type-graphql 点击查看 免费下载 TypeGraphQL 的核心思路,是从…

阅读更多 →
jspaint 无障碍化实战:深入解析 Tracky Mouse 头部追踪与驻留点击 API 2026/9/27 8:48:17

jspaint 无障碍化实战:深入解析 Tracky Mouse 头部追踪与驻留点击 API

前端桌面应用图像处理 【免费下载链接】jspaint 🎨 Classic MS Paint, REVIVED ✨Extras 项目地址: https://gitcode.com/gh_mirrors/js/jspaint 点击查看 免费下载 本…

阅读更多 →
生产级 MySQL 死锁深度排障实战:Insert 唯一键冲突引发的 Next-Key Lock 锁升级死锁分析 2026/9/27 8:48:17

生产级 MySQL 死锁深度排障实战:Insert 唯一键冲突引发的 Next-Key Lock 锁升级死锁分析

生产级 MySQL 死锁深度排障实战:Insert 唯一键冲突引发的 Next-Key Lock 锁升级死锁分析在互联网大厂高并发业务(如用户注册并发防重、工单创建流水号幂等、秒杀防超卖)的生产运维中,MySQL InnoDB 死锁(Deadlock&#…

阅读更多 →
KubeVela Operation 权限组件设计解读:用两个 ComponentDefinition 落地 invoke / operate / use 权限模型 2026/9/27 8:48:17

KubeVela Operation 权限组件设计解读:用两个 ComponentDefinition 落地 invoke / operate / use 权限模型

云原生DevOps运维微服务 【免费下载链接】kubevela The Modern Application Platform. 项目地址: https://gitcode.com/gh_mirrors/ku/kubevela 点击查看 免费下载 本篇文章围绕 KEP-2.15(OperationTemplate 与 Operation)配套的权限设计文档…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉