“持续就是力量,抓紧'今天' 一天,认真地过日子。假如每天都努力工作,并设法改变一些事情,或许就能预见明日的光景。一天天累积起来的就已非常可观,5年,10年后的成就必然会辉煌。”
--出自《稻盛和夫给年轻人的忠告》
01
—
前言
上一篇文章写了关于在命令行中输入 `npm run xxx` 之后,系统为我们做了哪
些工作,以及背后的基本原理是怎么样的。
接下来,我们继续说一下关于 package.json 的几点知识。本来这篇文章是打
算详细讲一下package.json的详情用法的,不过我觉得大家可能都已经对其
用法比较明白了。
所以我们这篇文章重点讲一下关于package.json几个比较重要和让人迷的知
识点。
02
—
package.json 和 package-lock.json两个文件的区别
众所周知,当我们运行完 `npm install` 命令之后,在生成两个比较重要的文件和文件夹:package-lock.json 和 node_modules。
对于 packags.json 我们都已经比较了解了,它主要是描述我们项目或者模块的一个清单文件。这个文件是不能缺少的。那么 package-lock.json是干什么的呢。我们简单看一下里面的内容
代码语言:javascript复制{
"name": "work-p-site",
"version": "0.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "work-p-site",
"version": "0.0.0",
"dependencies": {
"normalize.css": "^8.0.1",
"vue": "^3.2.16",
"vue-router": "^4.0.12"
},
"devDependencies": {
"@vicons/ionicons5": "^0.11.0",
"@vitejs/plugin-vue": "^1.9.3",
"naive-ui": "^2.24.0",
"sass": "^1.43.3",
"sass-loader": "^12.2.0",
"typescript": "^4.4.3",
"vfonts": "^0.1.0",
"vite": "^2.6.4",
"vite-plugin-components": "^0.13.3",
"vue-tsc": "^0.3.0"
}
},
}
当然这里面的内容是非常多的,我已经删除了很多很多,大约有 3000 行。我们发现和 package.json 长的很像,但也不完全一样(废话,完全一样,要这个文件干啥)
简单一句话就是:
它可以锁定我们的版本号和依赖信息,而且一定要提交到git上。这样我们下次就可以使用它安装依赖。从而保持每个机器上或者每个开发人员的手上用的依赖都是一样的。
它是 npm 自动为我们安装生成的,所以我们不平时不需要修改,只要注意一下就把它添加到版本管理中就好。
02
—
package.json中的依赖版本号开头符号是什么意思
先来看一下我们平时用的依赖长什么样:
代码语言:javascript复制"dependencies": {
"axios": "0.21.0",
"clipboard": "^2.0.8",
"core-js": "^3.6.5",
"echarts": "^5.0.2",
"element-china-area-data": "~5.0.2",
"element-ui": ">=2.14.1",
"font-awesome": "^4.7.0",
"js-cookie": "^2.2.1",
"marked": "^2.0.3",
"mockjs": "^1.1.0",
"normalize.css": "^8.0.1",
},
可以看到版本号之前符号挺多有的还没有符号。下面我们重点说一下都是什么意思:
- 没有指定特殊符号
"xxxxx": "1.0.0"
在 npm install 的时候,明确指出我要安装这个版本。
- 以 ^ 开头的
"xxxxx": "^1.0.0"
在 npm install 的时候,我要安装最小版本是 1.0.0的,可以安装 1.0.1等更高的版本
- 以 ~ 开头的
"xxxxx": "~1.1.1"
在 npm install 的时候,要安装大于 1.1.1 但是小于 1.2.0的所有版本,如1.1.2、1.1.3等。但不能大于 1.2.0
- latest
"xxxxx": "latest"
在 npm install 的时候,永远保证最新的。
- >=
"xxxxx": ">=1.1.0"
在 npm install 的时候,必须大于或者等于 1.1.0版本
03
—
总结
关于 package.json 还有很多有意思的用法,基于篇幅,我们先介绍这么多,如果以后有机会我们再介绍其它的用法