Node.js package.json和package-lock.json文件之间的区别
在本文中,我们将学习package.json和package.lock.json之间的主要区别,以及它们在Node.js中的需求。
在Node.js中,package.json是一个版本文件,用于在您的项目中安装多个包。当您初始化您的Node应用程序时,您将在您的应用程序中安装三个文件,即node_modules,package.json和package.lock.json。
您可以通过运行下面的命令来初始化Node项目-
npm init
初始化之后,您的 package.json 将大致如下所示。
{
"name": "Your project name",
"version": "1.0.0",
"description": "Your project description",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
},
"author": "Author name",
"license": "ISC",
"dependencies": {
"dependency1": "^1.4.0",
"dependency2": "^1.5.2"
}
}
如上所示,package.json文件包含关于项目的元数据,以及应用程序所需的功能性依赖项。
下面是一个典型的package.lock.json文件的样子,
{
"name": "Your project name",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"dependency1": {
"version": "1.4.0",
"resolved":
"https://registry.npmjs.org/dependency1/-/dependency1-1.4.0.tgz",
"integrity":
"sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
},
"dependency2": {
"version": "1.5.2",
"resolved":
"https://registry.npmjs.org/dependency2/-/dependency2-1.5.2.tgz",
"integrity":
"sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ=="
}
}
}
但是问题是,当您在项目应用程序中有package.json时,为什么需要package.lock.json。 package.lock.json 是为了 锁定与已安装版本的依赖关系。 它将在您的应用程序中安装该软件包的确切最新版本,并将其保存在package.json中。假设当前的软件包版本为1.3.2,则它将使用(^)符号保存版本。在这里,^表示,它将支持任何具有主要版本1的更高版本,例如1.2.2。
如果没有package.lock.json,不同环境中安装的版本可能会有些差异。为了解决这个问题,创建了package.lock.json以在每个环境中产生相同的结果。它应该与package.json文件一起放在源代码控制中,因为如果其他用户克隆项目并安装依赖项,它将安装与package.lock.json中完全相同的依赖项,以避免差异。
以下是两者之间的主要差异,
package.json | package.lock.json |
---|---|
包含关于项目的基本信息。 | 描述生成的确切树,以允许后续安装具有相同的树。 |
对每个项目都是必需的。 | npm 修改 node_modules 树或 package.json 时自动生成。 |
记录项目的重要元数据。 | 允许将来的开发者在项目中安装相同的依赖关系。 |
包含名称、描述、作者、脚本和依赖等信息。 | 包含项目的名称、依赖关系和锁定版本。 |