我的应用程序是节点v4,我在v4上回写了它,从不需要更新它(如果它没有损坏...)。也就是说,直到其中一个依赖项在次要版本更新中删除了v4支持。
我读到5.x +
中有package-lock.json
的想法
在必须从源代码重新安装时,package-lock.jso
n概念是否可以防止次要版本破坏我的应用程序的情况?
我基本上想验证node_modules
是否按预期工作,并且每次运行npm install
时,我都会得到与最初所做的相同的node_modules
,即使有5个深层的依存关系决定更新他们不想要的包裹。
答案 0 :(得分:2)
正如您在评论中所说,答案是肯定的。
对于您的依赖项依赖项,运行npm install
将安装在各自的package.json中指定的版本(它们没有package-lock.json,因为它尚未发布,但是他们可能具有{{ 3}}),除非您运行shrinkwrap。
简而言之,如果您运行npm update
,只会在您不希望的情况下运行,但是npm install
不会给您带来麻烦。
顺便说一句,您可以通过将package.json
复制到2个环境中来轻松地复制该行为,在该环境中您拥有所需的2个版本的节点。
答案 1 :(得分:1)
package-lock.json是为npm修改node_modules树或package.json的任何操作自动生成的。它描述了生成的确切树,因此无论中间依赖项更新如何,后续安装都可以生成相同的树。
此文件旨在提交到源存储库中,并具有多种用途:
描述一个依赖关系树的单一表示,这样可以确保队友,部署和持续集成安装完全相同的依赖关系。
为用户提供一种工具,使其可以“时间旅行”到node_modules的先前状态,而不必提交目录本身。
为了通过可读的源代码控制差异来更好地了解树的变化。
并允许npm跳过以前安装的软件包的重复元数据解析,从而优化安装过程。
关于package-lock.json的一个关键细节是它无法发布,并且如果在顶级软件包之外的任何地方都将被忽略。它与npm-shrinkwrap.json(5)共享一种格式,该格式本质上是相同的文件,但是可以发布。除非部署CLI工具或使用发布过程来生产生产软件包,否则不建议这样做。
如果package-lock.json和npm-shrinkwrap.json都存在于包的根目录中,则package-lock.json将被完全忽略。