npm@5已经发布,它有一个新的功能包锁。Json文件(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",
包锁的目标。Json文件是为了跟踪安装的每个包的确切版本,以便即使包由其维护者更新,产品也可以100%以相同的方式再现。
这解决了一个非常具体的问题。jsonleft没有解决。在包中。Json,你可以设置你想升级到哪个版本(补丁或小),使用semver符号。
这是npm的一个非常重要的改进:保证每个包的版本完全相同。
如何确保在不同的时间、不同的环境中使用相同的包构建项目?比方说,您可以在包中使用^1.2.3。Json,或者你的一些依赖项正在使用这种方式,但是你如何确保每次NPM安装都在你的开发机器和构建服务器中获得相同的版本呢?package-lock。Json将确保这一点。
NPM install会重新生成锁文件。 在构建服务器或部署服务器上,执行npm ci (它将从锁文件中读取,并安装整个包树)
还有一件重要的事情需要提及,那就是包锁文件带来的安全性改进。因为它保存了所有包的哈希值,如果有人篡改了公共npm注册表,甚至没有改变包本身的版本就改变了包的源代码,包锁文件就会检测到。
npm会自动创建这个文件,并使用它来跟踪你的包安装情况 并且更好地管理项目依赖项的状态和历史。你 不应该改变这个文件的内容。
推荐文章
- npm start和npm run start的区别
- 有没有办法修复包锁。json lockfileVersion所以npm使用特定的格式?
- 如何使用npm全局安装一个模块?
- npm犯错!错误:EPERM:操作不允许,重命名
- 编译typescript时'tsc命令未找到'
- npm不工作-“读取ECONNRESET”
- npm install from Git在特定的版本
- 顺序运行NPM脚本
- NPM卡住给出相同的错误EISDIR:对目录的非法操作,读取错误(本机)
- Browserslist: canius -lite已经过时。请运行下一个命令' npm update caniuse-lite browserslist '
- 检查已安装的angular-cli版本?
- 如何使webpack开发服务器运行在端口80和0.0.0.0使其公开访问?
- 如何在AWS Lambda中加载npm模块?
- 当我运行' npm install '时,它返回' ERR!代码EINTEGRITY ' (npm 5.3.0)
- NPM清洁模块