前言
今天正在写代码,同学突然问我,package.json
和package-lock.json
有什么区别,这两个文件有什么用?我愣住了…
模块化开发
经过这么多年的发展,现在的前端开发基本上都是模块化开发了。而node
和npm
则可以很方便的管理项目所依赖的模块。我们在使用npm init
初始化项目的时候就会生成一个package.json
文件,package.json
用来描述项目及项目所依赖的模块信息。
package.json
This document is all you need to know about what’s required in your package.json file. It must be actual JSON, not just a JavaScript object literal.
A lot of the behavior described in this document is affected by the config settings described in
config
.
翻译过来就是:本文档是您需要了解 package.json
文件中所需内容的全部内容。它必须是实际的 JSON
,而不仅仅是 JavaScript
对象文字。本文档中描述的许多行为都受 config
中描述的配置设置的影响。
package.json
记录了项目的配置信息,包括名称、版本、许可证等数据,也会记录所需的各种模块,包括 执行依赖,和开发依赖,以及scripts
字段。
package-lock.json
关于package-lock.json
的官方解释如下:
package-lock.json
is automatically generated for any operations where npm modifies either thenode_modules
tree, orpackage.json
. It describes the exact tree that was generated, such that subsequent installs are able to generate identical trees, regardless of intermediate dependency updates.
翻译过来就是:对于npm
修改node_modules
或package.json
的任何操作,都会自动生成package-lock.json
。它准确的描述了当前项目npm
包的依赖树,以便在后续的安装中能够生成相同的树,而不管中间依赖项如何更新。
用人话就是,package-lock.json
对整个依赖树进行版本固定的,package-lock.json
会记录各个模块的版本信息和下载路径。这样,在任何时候,我们再对项目进行npm install
的时候,npm
发现如果项目中有package-lock.json
文件,就会根据package-lock.json
里的内容来处理和安装依赖而不再根据package.json
。
"dependencies": {
"react": "^16.8.0",
}
package.json
文件只能锁定大版本,即版本号的第一位,并不能锁定后面的小版本,如果没有package-lock.json
,每次npm install
都是拉取的该大版本下的最新的版本。比如上面的react
为16.8.0
版本,假如有了最新版16.8.1
,如果没有package-lock.json
,在npm install
的时候,就会自动更新为16.8.1
。很多时候,为了项目的稳定性,我们一般不会随意升级依赖包,因此使用package-lock.json
文件,当你每次安装一个依赖的时候就锁定在你安装的这个版本,不会升级依赖包。
最后
最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。
有需要的小伙伴,可以点击下方卡片领取,无偿分享