前言
平常在工作中,对package.json
这个文件的接触非常非常少。
-
一些同学可能还会看一下script里面有什么命令,执行了哪些方法。
-
又或者了解一下
dependencies
和devDependencies
-
其他大部分的同学可能直接就
npm i
和npm start
就开始工作了。 -
但是
package.json
的魅力远不止如此 -
今天就和我一起探索一下这个项目中不可或缺的——
package.json
吧!
由浅入深-核心内容
准备工作
手摸手新建一个空的package.json
npm init
上万个回车
或者直接执行
npm init -y
- 其意思就是全部都略过,和我们上面的无数个回车的效果一样
先看看上面有的东西。
{
"name": "package.json", # 项目名称
"version": "1.0.0", # 项目版本(格式:大版本.次要版本.小版本)
"description": "", # 项目描述
"main": "index.js", # 入口文件
"scripts": {
# 指定运行脚本命令的 npm 命令行缩写
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [], # 关键词
"author": "", # 作者
"license": "ISC" # 许可证
}
scripts(快捷脚本)
scripts
字段是package.json
中的一种元数据功能,它接受一个对象,对象的属性为可以通过npm run
运行的脚本,值为实际运行的命令(通常是终端命令),如:
"scripts": {
"start": "node index.js"
},
复制代码
- 将终端命令放入
scripts
字段,既可以记录它们又可以实现轻松重用。
dependencies & devDependencies(项目依赖)
dependencies
字段指定了项目运行所依赖的模块- 可以理解为我们的项目在生产环境运行中要用到的东西。
- 比如说我们常用的
antd
只能哪个代码块就会用到里面的组件,所以要放到dependencies
里面去
devDependencies
字段指定了项目开发所需要的模块- 开发环境会用到的东西,比如说webpack。我们打包的时候会用到,但是项目运行的时候却用不到,所以只需要放到
devDependencies
中去就好了 - 类似的
eslint
之类的
- 开发环境会用到的东西,比如说webpack。我们打包的时候会用到,但是项目运行的时候却用不到,所以只需要放到
这里重点谈一下这些版本号直接的差异
~1.1.1
~1.2.3
:=>=1.2.3 <1.(2+1).0
:=>=1.2.3 <1.3.0-0
~1.2
:=>=1.2.0 <1.(2+1).0
:=>=1.2.0 <1.3.0-0
(同1.2.x
)~1
:=>=1.0.0 <(1+1).0.0
:=>=1.0.0 <2.0.0-0
(同1.x
)~0.2.3
:=>=0.2.3 <0.(2+1).0
:=>=0.2.3 <0.3.0-0
~0.2
:=>=0.2.0 <0.(2+1).0
:=>=0.2.0 <0.3.0-0
(同0.2.x
)~0
:=>=0.0.0 <(0+1).0.0
:=>=0.0.0 <1.0.0-0
(同0.x
)~1.2.3-beta.2
:=>=1.2.3-beta.2 <1.3.0-0
请注意,1.2.3
版本中的预发布将被允许,如果它们大于或等于beta.2
. 所以,1.2.3-beta.4
会被允许,但1.2.4-beta.2
不会,因为它是不同[major, minor, patch]
元组的预发布。
^1.1.1
允许不修改[major, minor, patch]
元组中最左边的非零元素的更改 。换句话说,这允许版本1.0.0
及以上版本的补丁和次要更新,版本的补丁更新0.X >=0.1.0
,以及版本的不更新0.0.X
。
许多作者将0.x
版本视为x
主要的“重大变化”指标。
当作者可能在发行版0.2.4
和0.3.0
发行版之间进行重大更改时,插入符范围是理想的,这是一种常见做法。但是,它假定和之间不会有重大变化 。根据通常观察到的做法,它允许进行假定为附加(但不会破坏)的更改。0.2.4``0.2.5
^1.2.3
:=>=1.2.3 <2.0.0-0
^0.2.3
:=>=0.2.3 <0.3.0-0
^0.0.3
:=>=0.0.3 <0.0.4-0
^1.2.3-beta.2
:=>=1.2.3-beta.2 <2.0.0-0
请注意,1.2.3
版本中的预发布将被允许,如果它们大于或等于beta.2
. 所以,1.2.3-beta.4
会被允许,但1.2.4-beta.2
不会,因为它是不同[major, minor, patch]
元组的预发布。^0.0.3-beta
:=>=0.0.3-beta <0.0.4-0
请注意,仅允许0.0.3
版本中的预发布 ,如果它们大于或等于. 所以,会被允许。beta``0.0.3-pr.2
解析插入符范围时,缺失patch
值会被减为数字0
,但即使主要版本和次要版本都是0
.
^1.2.x
:=>=1.2.0 <2.0.0-0
^0.0.x
:=>=0.0.0 <0.1.0-0
^0.0
:=>=0.0.0 <0.1.0-0
缺失值minor
和patch
值将脱糖为零,但也允许在这些值内具有灵活性,即使主要版本为零。
^1.x
:=>=1.0.0 <2.0.0-0
^0.x
:=>=0.0.0 <1.0.0-0
1.1.x
任何的X
,x
或*
可被用来“立场在”在数字值中的一个[major, minor, patch]
元组。
*
:=>=0.0.0
(任何版本都满足)1.x
:=>=1.0.0 <2.0.0-0
(匹配主要版本)1.2.x
:=>=1.2.0 <1.3.0-0
(匹配主要和次要版本)
部分版本范围被视为 X 范围,因此特殊字符实际上是可选的。
""
(空字符串):=*
:=>=0.0.0
1
:=1.x.x
:=>=1.0.0 <2.0.0-0
1.2
:=1.2.x
:=>=1.2.0 <1.3.0-0
1.1.1 - 1.1.2
指定一个包含集。
1.2.3 - 2.3.4
:=>=1.2.3 <=2.3