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
推荐文章
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- 对嵌套文件夹运行npm install的最好方法是什么?
- 在Ubuntu上安装Bower
- 在Ubuntu上安装Node.js
- Node -使用NODE_MODULE_VERSION 51根据不同的Node.js版本编译
- 禁用包的postinstall脚本
- NodeJS -用NPM安装错误
- 如何为本地安装npm包设置自定义位置?
- 如何用分发文件发布npm包?
- 如何判断一个npm包是全局安装还是本地安装
- NodeJS需要一个全局模块/包
- 在MacOS X上推荐用什么方式安装Node.js、nvm和npm ?
- npm install和npm run build有什么区别?
- npm start和npm run start的区别