我们在项目中安装依赖包最常用的两个工具分别是npm和yarn,两个工具安装依赖包的命令分别是npm install和yarn install。
无论是用哪种命令进行安装,其均会按照package.json文件中所列的依赖项进行安装。下面看一看package.json、package-lock.json以及yarn.lock三个文件之间的关系。
package.json
主要用来定义项目中需要依赖的包以及相关执行命令与附加信息。
package-lock.json
在 npm install时候生成该文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
^:放在版本号之前,表示向后兼容依赖,就是在大版本号不变的情况下下载最新版的包。项目中引入的包版本号之前经常会加^号,每次在执行npm install之后下载的包都会发生变化。为了系统的稳定性考虑,每次执行完npm install之后会对应生成package-lock.json文件,该文件记录了上一次安装的具体的版本号,这样就提供了一个参考,在出现版本兼容性问题的时候,就可以参考这个文件来修改版本号即可。
yarn.lock
Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。就像我们可以从官方文档了解那样,它的目的是解决这些团队使用 npm 面临的少数问题,即:
安装的时候无法保证速度/一致性。
安全问题,因为 npm 安装时允许运行代码。
Yarn 同样是一个从 npm 注册源获取模块的新的 CLI 客户端,其注册的方式不会有任何变化可以正常获取与发布包。
Yarn是一个快速可靠安全的依赖管理工具。 主要的三个特点:
快速,Yarn会缓存它下载的每个包,所以无需重复下载。它还能并行化操作以最大化资源利用率。
安全,Yarn会在每个安装包被执行前校验其完整性。
可靠, Yarn使用格式详尽而又简洁的lockfile文件和确定性算法来安装依赖,能够保证在一个系统上的运行的安装过程也会以同样的方式运行在其他系统上。
关于yarn.lock文件,官网的解释如下:
由Yarn管理
您的yarn.lock文件是自动生成的,也完全Yarn来处理。当你使用Yarn CLI添加/升级/删除 依赖项的时,它将自动更新到您的yarn.lock文件。不要直接编辑这个文件,因为很容易破坏某些东西。 仅限当前包 在安装期间,Yarn将仅使用顶级yarn.lock文件,并将忽略依赖项中存在的任何yarn.lock文件。顶级yarn.lock文件包含Yarn需要锁定整个依赖关系树中所有包的版本的所有内容。
yarn.lock的具体的作用是什么?它能给项目带来什么作用?
Yarn使用确定性算法,在将文件放置到需要的位置之前构建整个依赖关系树。安装过程中重要信息存储到yarn.lock文件中,以便可以在安装依赖关系的每个系统之间共享!此文件包含有关已安装的每个依赖项的确切版本的信息以及代码的校验和以确保代码完全相同。
yarn.lock会锁定你安装的每个依赖项的版本,这可以确保你不会意外获得不良依赖; 并且会避免由于开发人员意外更改或则更新版本,而导致糟糕的情况!
写在最后
使用npm安装生成了一个package-lock.json文件来注册所有的安装的依赖. 然而它不能保证每次npm install都会安装里面的指定的包的版本,但是yarn.lock可以。
参考
yarn详细入门教程
yarn.lock文件
项目里的package.json、package-lock.json、yarn.lock文件