什么是package.json
package.json文件记录当前项目中所需要的包信息(包名、版本号等)。
什么是package-lock.json
package-lock.json记录当前状态下安装的各个npm package的具体来源和版本号、模块下载地址、及这个模块用到的依赖。首次安装依赖包时会创建package-lock.json。
为什么需要package-lock.json
- 锁定版本号,防止自动升级新版本
- 删除node_module目录时,想通过npm install 恢复所有包时,提升下载速度。
如何生成packge.json与package-lock.json
- 生成package.json => npm init -y
- 生成package-lock.json => npm install --package-lock-only
npm安装包的方式
- npm 安装包分为本地安装和全局安装。安装使用npm install
- 本地安装的包分
devDependencies开发依赖和dependencies生产依赖 - 如果想要安装的包放在
开发依赖,npm install --save-dev或npm install -D - 如果想要安装的包放在
生产依赖,npm install --save或npm install -S
npm install 发生了什么
npm ci 又发生了什么
npm ci 类似于 npm install ,旨在自动化环境。
- 该项目必须有
package-lock.json文件; - 如果package-lock.json与package.json依赖项不匹配,npm ci 则将报错,而不是更新 package-lock;
- npm ci
只能一次安装整个项目,如果node_modules已经存在,将在npm ci 开始安装之前自动删除; - npm ci 不会写入package.json
npm 版本号
npm 默认所有的Node包都使用语义化版本号。每个版本号形如1.2.1,由三部分组成:
主版本号:当新版本无法兼容基于前一版本的代码时,则主版本号加1次版本号:当新版本新增了功能与特性,但兼容前一版本时,次版本加1修订号:当新版本仅仅修正了漏洞或者提高效率,仍兼容前一版,则修订号加1
版本符号定义
波浪号:安装时不改变主版本号与次要版本号插入号:安装时不改变主版本号- latest: 安装最新版本
例如:
{
"react":"^18.2.0", // 插入符号 ^18.2.0 :匹配 18.X.X 的最新版本。
"react-dom":"~18.2.0" // 波浪符号 ~18.2.0 :匹配 18.2.X 的最新版本。
"react-refresh": "0.11.0" // 固定版本 0.11.0 : 匹配 0.11.0, 不会更新版本。
}