如何使用package-lock.json中的版本覆盖package.json“最新” dist-tag?

时间:2018-08-01 11:08:45

标签: npm npm-install package.json package-lock.json

我想将latest中的package.json分发标签用于内部软件包。这样一来,当我在本地环境中npm install时,始终可以获得最新版本,而无需更新所有外部第三方。

当我修复已部署的版本时出现问题:

  • 出于修复目的,我为应用程序的每个部署版本生成并保存package-lock.json
  • 但是当我npm install进行修补程序准备时,package.jsonpackage-lock.json中的内部软件包版本之间存在冲突:package-lock.json指向已部署的版本应用程序,但package.json指向latest分发标签,分发标签本身指向更高版本。
  • 由于package-lock.json中指定的版本不适合package.json中指定的版本范围(非常具体-仅适用于最新版本),因此npm install忽略{{1} }并安装最新版本。

我搜索了文档和互联网,但没有找到解决该问题的任何现有解决方案:

  • 我没有发现任何package-lock.json标志会比npm install中的发行标签优先处理package-lock.json版本的
  • 我找不到任何工具可以从package.json重建package.json,或至少用package-lock.json的特定版本替换package.json中的别名(分布标签)。

我的问题是否有解决方案(除了编写将实现最后一种方法的工具外)?

沙盒: https://github.com/maxlk/npm-lock-version-should-override-latest(克隆并运行package-lock.json或其他替代方法)

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方案-使用npm ci代替npm install

尽管有文档https://docs.npmjs.com/cli/ci

中的声明,它也不会错误退出。
  

如果软件包锁中的依赖项与package.json中的依赖项不匹配,则npm ci将退出并显示错误,而不是更新软件包锁。