You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新npm/ng-packagr后发布npm包时包名与版本错误解决方案

问题原因

NPM 8.x 版本调整了npm publish命令的参数解析逻辑:当传入的参数是不带路径前缀的目录名时,NPM会优先将其识别为远程仓库的包名,而非本地目录路径。
你脚本里写的npm publish dist,会让NPM直接匹配公共仓库里名为dist的第三方公共包,拉取该包0.1.2版本的元信息和文件列表(就是日志里显示的包含bin/dist.js、test测试用例的无关内容),完全跳过对你本地dist目录下ng-packagr构建产物的读取,所以最终识别到的包名、版本和文件列表全部不符合预期。
另外根目录package.json中"private": true的配置是合理的,该配置只会阻止根目录私有项目被误发布,不会影响子目录构建产物的发布流程,无需修改。

可行修复方案

二选一即可,推荐优先用第一种,改动最小:

  • 方案1:给目录参数加本地路径前缀,强制NPM识别为本地路径
    将根目录package.json里的publish脚本修改为:
    "publish": "npm publish ./dist"
    
    增加./前缀后,NPM会明确将参数解析为当前工作目录下的dist文件夹,自动读取该文件夹内package.json配置的@me/ng13包名、1.0.0版本等元信息,不会再去匹配远程同名包。
  • 方案2:切换到构建产物目录后再执行发布,彻底避免路径解析歧义
    将publish脚本修改为:
    "publish": "cd dist && npm publish"
    
    该写法直接在dist目录内执行发布命令,NPM默认读取当前目录的package.json,不存在参数解析混淆的可能。
验证方式

修改脚本后,可先执行带预检查参数的命令验证:

npm run publish -- --dry-run

待输出的包名、版本、文件列表和ng-packagr构建产物完全一致后,再去掉--dry-run执行正式发布即可。

内容的提问来源于stack exchange,提问作者Mickey P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 15:31:57