插入符号范围和 package-lock.json:如何使用它们获得最新的非破坏版本?
Posted
技术标签:
【中文标题】插入符号范围和 package-lock.json:如何使用它们获得最新的非破坏版本?【英文标题】:Caret range and package-lock.json: how to get latest non-breaking versions with them? 【发布时间】:2018-10-05 23:12:06 【问题描述】:我知道package-lock.json
代表什么,但我不明白添加此文件后插入符号范围如何工作?
假设我有一个包 (my-module
),我希望在不手动指定新版本的情况下拥有所有新的非破坏版本。我安装了最新版本,这是package.json
文件中的结果:
"my-module": "^4.1.1"
不过,package-lock.json
也在更新,将my-module
的版本修复为4.1.1
。
下次my-module
发布新版本时:4.1.2
。运行npm i
将不会安装它,因为package-lock.json
中的版本已固定为旧版本。
问题
我怎样才能实现npm i
将下载my-module
的最新非破坏版本而不总是创建新的package-lock.json
文件?这个文件是否只是使用插入符号范围而无效?
【问题讨论】:
【参考方案1】:我们提出了使用package.json
的preinstall
功能的想法。
所以在你的 package.json
文件的 scripts 标签下添加:
"preinstall": "npm update"
.
由于npm update
仅更新受插入符号范围语法影响的软件包,您可以同时拥有package-lock.json
和最新更新。
【讨论】:
【参考方案2】:虽然我不喜欢只发布文档逐字,但我认为这是解释为什么您所要求的正是package-lock 的最佳来源。 json 被设计为不必这样做:
package-lock.json 会为 npm 修改 node_modules 树或 package.json 的任何操作自动生成。 p>
它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖项更新如何。
当 package.json 被输入npm i
时,操作的结果是文件系统 node_modules,与 package 中声明的所有依赖项一致.json 文件。
此操作不会始终产生相同的结果:即使使用完全相同的 package.json 文件。 npm i
被设计为这样做是有充分理由的,特别是:
【讨论】:
以上是关于插入符号范围和 package-lock.json:如何使用它们获得最新的非破坏版本?的主要内容,如果未能解决你的问题,请参考以下文章
Node.js 官网入门教程 npm(安装包版本卸载npx)package.json(scriptsdevDependencies)package-lock.json(语义版本规则符号
npm-shrinkwrap.json和package-lock.json有什么区别?
package-lock.json和package.json区别
使用 Git 管理 package.json 和 package-lock.json