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


当前回答

npm会自动创建这个文件,并使用它来跟踪你的包安装情况 并且更好地管理项目依赖项的状态和历史。你 不应该改变这个文件的内容。

其他回答

npm会自动创建这个文件,并使用它来跟踪你的包安装情况 并且更好地管理项目依赖项的状态和历史。你 不应该改变这个文件的内容。

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

包锁的目标。Json文件是为了跟踪安装的每个包的确切版本,以便即使包由其维护者更新,产品也可以100%以相同的方式再现。

这解决了一个非常具体的问题。jsonleft没有解决。在包中。Json,你可以设置你想升级到哪个版本(补丁或小),使用semver符号。

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

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",