前言
package.json
与package.lock.json
在项目开发的时候经常接触到,这里做一个整理。
一、package.json
package.json文件通常位于项目的根目录,包含了项目的各种数据:项目的描述信息,项目的相关依赖。
1 创建文件
package.json
可以手动创建,也可以自动生成。
在node
环境下输入以下命令,就会自动生成package.json
文件。
npm init
2 json数据
{
"name": "banana", // 项目名称
"version":"0.0.1", // 版本信息
"description": "描述", // 描述信息
"keywords":["node.js","BANANA", "theme"], // 字符串数组 助于人们在npm库中搜索的时候发现你的模块
"homepage": "https://banana.com", // 项目的主页地址
"bugs":{"url":"http://banana/","email":"banana@xxxx.com"}, // 项目问题的反馈issue地址或者一个邮箱
"license": "ISC", // 项目的协议
"author": "banana", // 项目作者
"contributors":[{"name":"banana","email":"banana@xxxx.com"}], // 项目作者
"main": "index.js", // 加载入口文件
"bin": { // 指定每个内部命令对应的可执行文件的位置。
"webpack": "bin/index.js",
},
"man": ["./doc/xxxx"], // 指定当前模块的man文档的位置。
"directories": "", // 描述模块的结构
"repository": { // 指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助
"type": "git",
"url": "https://banana/"
},
"scripts": { // 指定了运行脚本命令的npm命令行缩写
"start": "webpack serve --config webpack.config.dev.js --progress"
},
"config": { "port" : "8080" }, // 添加命令行的环境变量。
"dependencies": {}, // 项目生产环境所依赖的模块
"devDependencies": { // 项目开发环境所需要的模块
"webpack": "^5.38.1",
},
"engines": {"node": "0.10.x"}, // 运行的环境信息
"os" : [ "win32", "darwin", "linux" ], // 限制只能在哪个操作系统上运行
"cpu" : [ "x64", "ia32" ], // 限制模块只能在某种架构的cpu下运行
"private": false, // 属性被设置为true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
"publishConfig": { // 配合private来使用,如果只想让模块被发布到一个特定的npm仓库,如一个内部的仓库。
"tag": "1.0.0",
"registry": "https://registry.npmjs.org/",
"access": "public"
}
}
4 scripts字段
scripts
字段指定了node
环境的运行脚本的npm
命令行缩写。
如package.json
有以下配置,可以在node
命令行输入npm run start
"scripts": {
"start": "webpack serve --config webpack.config.dev.js --progress"
},
5 dependencies与devDependencies字段
5.1 描述
-
dependencies
项目生产环境所依赖的模块 -
devDependencies
项目开发环境所依赖的模块
5.2 npm install
不同的安装命令,会把依赖写入不同的字段里面,下面列了下清单
5.2.1 dependencies
npm install // 不加参数时,默认会把依赖写入dependencies字段
npm install --s
npm install -S
5.2.2 devDependencies
npm install --save-dev
npm install -D
6 版本号规则
当输入脚本npm install xxx@x.y.z
的时候会去仓库下载指定依赖。
所有版本号格式为x.y.z
: 主版本.次版本.补丁版本
"devDependencies": {
"webpack": "^5.38.1",
},
前缀符号
-
~
:只更新补丁版本。 如~1.2.3
,1.2.9
可以,而1.3.1
不可以。 -
^
:可以更新次版本,补丁版本。 如^1.2.3
,1.3.1
1.5.9
可以。 -
*
:可以更新全部版本。如*1.2.3
,2.2.3
可以。 -
>
:大于指定版本。 -
>=
:大于或等于指定版本。 -
<
:小于指定版本。 -
<=
:小于或等于指定版本。 -
无符号
:特定版本。 -
latest
:最新版本。
二、package.lock.json
1 官方描述:
package-lock.json
它会在npm
更改node_modules
目录树或者package.json
时自动生成的,它准确的描述了当前项目npm
包的依赖树,并且在随后的安装中会根据package-lock.json
来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的更新。
{
"name": "project-name",
"version": "0.1.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@ant-design-vue/babel-helper-vue-transform-on": {
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz",
"integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=",
"dev": true
},
}
}
2 与package.json
区别
package.json
描述了依赖的部分信息,
package.lock.json
描述了依赖的详细信息,包括所有依赖的具体版本号,安装地址,sha-1加密后的值,安装在哪个环境,依赖内部所需要的依赖项。
当执行npm install
命令的时候,如果项目中有package-lock.json
,那么就会从中解析所需安装的依赖,而不是通过package.json
。
3 注意
cnpm
不支持package.lock.json