npm@5已经发布,它有一个新的功能包锁。Json文件(NPM安装后),这让我感到困惑。我想知道,这个文件的效果是什么?


当前回答

还有一件重要的事情需要提及,那就是包锁文件带来的安全性改进。因为它保存了所有包的哈希值,如果有人篡改了公共npm注册表,甚至没有改变包本身的版本就改变了包的源代码,包锁文件就会检测到。

其他回答

还有一件重要的事情需要提及,那就是包锁文件带来的安全性改进。因为它保存了所有包的哈希值,如果有人篡改了公共npm注册表,甚至没有改变包本身的版本就改变了包的源代码,包锁文件就会检测到。

package-lock。当package.json中的一个属性(如“version”属性)中的数值或依赖属性被更改时,Json将被写入。

如果这些数值在包装中。Json和包锁。Json匹配,包锁。Json被读取。

如果这些数值在包装中。Json和包锁。Json不匹配,包锁定。Json被写入这些新值,以及新的修饰符,如插入号和波浪号(如果它们存在的话)。但是正是这个数字触发了对package-lock.json的更改。

要明白我的意思,请执行以下操作。使用包。不带包锁的Json。运行NPM install,使用:

{
  "name": "test",
  "version": "1.0.0",
  ...
  "devDependencies": {
    "sinon": "7.2.2"
  }
}

package-lock。Json现在有:

"sinon": {
  "version": "7.2.2",

现在复制/粘贴两个文件到一个新目录。改变计划。Json到(只添加插入符号):

{
  "name": "test",
  "version": "1.0.0",
  ...
  "devDependencies": {
    "sinon": "^7.2.2"
  }
}

运行NPM install。如果没有包裹锁。Json文件,sinon@7.3.0将被安装。NPM install正在从package-lock读取。Json和安装7.2.2。

现在换包。json:

{
  "name": "test",
  "version": "1.0.0",
  ...
  "devDependencies": {
    "sinon": "^7.3.0"
  }
}

运行NPM install。package-lock。Json已经被写入,现在将显示:

"sinon": {
  "version": "^7.3.0",

package-lock。json:它包含应用程序当前安装的确切版本细节。

这是npm的一个非常重要的改进:保证每个包的版本完全相同。

如何确保在不同的时间、不同的环境中使用相同的包构建项目?比方说,您可以在包中使用^1.2.3。Json,或者你的一些依赖项正在使用这种方式,但是你如何确保每次NPM安装都在你的开发机器和构建服务器中获得相同的版本呢?package-lock。Json将确保这一点。

NPM install会重新生成锁文件。 在构建服务器或部署服务器上,执行npm ci (它将从锁文件中读取,并安装整个包树)

包中。json文件包含你安装的包和库的主要名称,你可以编辑它,但是Package-lock。json包含每个包的详细信息和每个包的存储库链接(考虑它是来自package.json的包的详细信息)引用

https://web-brackets.com/discussion/69/what-is-the-use-of-package-lock-json-file