package.json
文件是项目的描述文件,记录了当前项目的信息,例如该项目的名称、版本、作者,以及该项目依赖了哪些第三方模块等。
当我们从github上下载一个项目时,需要在命令行使用npm install
来安装相关依赖,但是具体会安装哪些依赖,就是根据package.json
文件中的内容来确定的。
当我们在自己的项目中新增一个依赖时(eg:npm install bootstrap
),该模块的相关信息也会自动添加到package.json文件中。
关于依赖的版本号
我们常见的版本号命名规则为:[name].x.y.z-[state]
name
为可选段,一般为v,表示Version;
x.y.z
为各版本的序号,一般都会遵循语义化版本 2.0.0 | Semantic Versioning,实际上基于此规范,name
段不会出现;
x、y、z为非负整数。
x为主版本号,变化了表示有了一个不兼容上个版本的大更改。
y为次版本号,变化了表示增加了新功能,并且可以向后兼容。
z为修订版本号,变化了表示有bug修复,并且可以向后兼容。
state
可选段,用来表示当前软件的状态。例如:b 表示bate版,即测试版。
比如1.2.2,遵循“大版本.次要版本.小版本”的格式,安装时只安装指定版本。
^+指定版本,eg:^1.2.2
,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。
波浪号(~)+指定版本,eg:~1.2.2
,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
*:意味着安装最新版本的依赖包。
推荐使用~,只会修复版本的bug,比较稳定。
使用^时 ,有的小版本更新后会引入新的问题导致项目不稳定,比如:有的老项目安装依赖后页面无法显示,修改依赖版本后才正常。
需要注意的是,如果大版本号为0,则^的行为与~相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
当然你可以指定特定的版本号,直接写1.2.3,前面什么前缀都没有,这样也没问题,但是如果依赖包发布新版本修复了一些小bug,那么就需要手动修改package.json文件中的版本号;~和^则可以解决这个问题。