package.json概述
随着前端模块化开发的流行,在使用node和npm来下载管理项目所需的依赖模块的时候,有一个文件必不可少,package.json。
它定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)。
当我们在命令行运行npm install的时候,就是node根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。
scripts字段
"scripts": {
"lint": "./node_modules/standard/bin/cmd.js",
"start": "npm run local",
"local": "webpack-dev-server --mode development --port 20000",
"build:test": "webpack --mode production",
"build:prod": "webpack --mode production"
}
指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
dependencies字段,devDependencies字段
dependencies字段指定了项目运行所依赖的模块。使用npm install 模块名 --save,安装到dependencies。
devDependencies指定项目开发所需要的模块。使用npm install 模块名 --save-dev,安装到devDependencies。
"dependencies": {
"@ant-design/icons": "^4.0.5",
"antd": "4.10.3",
"react": "^16.12.0",
"react-dom": "^16.13.1",
"react-redux": "^7.1.1",
"react-router": "^5.0.1",
"react-router-cache-route": "^1.9.0",
"react-router-dom": "^5.0.1",
"redux": "^4.0.4"
},
"devDependencies": {
"clean-webpack-plugin": "^1.0.0",
"copy-webpack-plugin": "^4.6.0",
"css-loader": "1.0.0",
"file-loader": "^2.0.0",
"happypack": "^5.0.1",
"webpack": "4.26.1",
"webpack-cli": "3.1.2",
"webpack-dev-server": "3.1.10"
}
a.b.c 表示版本。 波浪号 比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。 插入号(caret)+指定版本 比如?1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。 latest 安装最新版本。
package-lock.json概述
1、使用cnpm install时候,并不会生成 package-lock.json 文件,也不会根据 package-lock.json 来安装依赖包,还是会使用 package.json 来安装。 2、package-lock.json 是在 npm(^5.x.x.x)后才有
package-lock.json 它会在 npm 更改 node_modules 目录树 或者 package.json 时自动生成的 ,它准确的描述了当前项目npm包的依赖树,并且在随后的安装中会根据 package-lock.json 来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的更新。官方是这样解释的
它的产生就是来对整个依赖树进行版本固定(锁死)。
当我们在一个项目中npm install时候,会自动生成一个package-lock.json文件,和package.json在同一级目录下。
package-lock.json记录了项目的一些信息和所依赖的模块。这样在每次安装都会出现相同的结果.。不管你在什么机器上面或什么时候安装。
当我们下次再npm install时候,npm 发现如果项目中有 package-lock.json 文件,会根据 package-lock.json 里的内容来处理和安装依赖而不再根据 package.json。
|