Caret range和package-lock.json:如何用它们获得最新的非破坏版本?

时间:2018-04-25 12:51:45

标签: javascript npm package-lock.json

我得到package-lock.json代表的内容,但我不明白添加此文件后插入符号范围如何工作?

假设我有一个包(my-module),我希望拥有所有新的非破坏版本,而无需手动指定新版本。我安装了最新版本,这是package.json文件中的结果:

"my-module": "^4.1.1"

然而,package-lock.json也正在更新,将my-module的版本修改为4.1.1

下次新版本来自my-module4.1.2。运行npm i安装它,因为package-lock.json中的版本已修复为旧版本。

问题

如何在不创建新npm i文件的情况下my-module下载package-lock.json的最新非破坏版本?这个文件是否因使用插入符号范围而无效?

2 个答案:

答案 0 :(得分:3)

我们提出了使用preinstall的{​​{1}}功能的想法。

所以在脚本标签下的package.json文件中添加: package.json

由于"preinstall": "npm update"仅更新受插入符范围语法影响的软件包,因此您可以同时拥有npm update和最新更新。

答案 1 :(得分:2)

虽然我不仅仅喜欢发布文档 verbatim ,但我认为这是解释为什么您要的正是 package-lock的最佳来源。 json 的设计目的是:

  
      对于任何由npm修改 node_modules 树或 package.json 的操作,会自动生成
  1. package-lock.json

  2.   
  3. 它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。

  4.   

package.json 馈入npm i时,操作结果是文件系统 node_modules ,与中声明的所有依赖项一致> package.json 文件。

此操作始终不会产生相同的结果:即使使用完全相同的 package.json 文件也是如此。 npm i被设计为这样做的理由很充分,

  • 如果自上次安装软件包以来已经发布了直接semver-range软件包的新版本,则将使用较新的版本。