阐述vue项⽬中package.json与package-lock.json作⽤及区别             
  我们每次新建⼀个项⽬的时候会发现在项⽬中会有这么俩个相似的⽂件,并且⼀个⾥边东西很多⼀个⾥边的东西很简洁,那么他们到底有什么区别与联系。
  npm5之前的版本,是不会⽣成package-lock.json这个⽂件的。npm5版本及以后,才会⽣成package-lock.json⽂件;当使⽤npm安装包的时候,npm都会⽣成或者更新package-lock.json⽂件,npm5版本及以后的版本,在安装包的时候,不需要加 --save(-s)参数,也会⾃动在package.json中保存依赖项,当安装包的时候,会⾃动创建或者更新package-lock.json⽂件。
  package-lock.json⽂件内保存了 node_modules中所有包的信息,包含着这些包的名称、版本号、下载地址。这样带来好处是,如果重新 npm install 的时候,就⽆需逐个分析包的依赖项,因此会⼤⼤加快安装速度。nodejs到底是干嘛用的呢
  package-lock.json⽂件,lock代表的是“锁定”的意思。⽤来锁定当前开发使⽤的版本号,防⽌npm install的时候⾃动更新到了更新版本。因为新版本可能替换掉⽼的api,导致之前的代码报错。
  package.json ⽂件只能锁定⼤版本,也就是版本号的第⼀位,并不能锁定后⾯的⼩版本,你每次npm install都是拉取的该⼤版本下的最新的版本,为了稳定性考虑我们⼏乎是不敢随意升级依赖包的,这将导
致多出来很多⼯作量,测试/适配等,这个时候package-lock.json⽂件应运⽽⽣,所以当你每次安装⼀个依赖的时候就锁定在你安装的这个版本。
  package.json⽂件记录你项⽬中所需要的所有模块。当你执⾏npm install的时候,node会先从package.json⽂件中读取所有dependencies信息,然后根据dependencies中的信息与node_modules中的模块进⾏对⽐,没有的直接下载,已有的检查更新(最新版本的nodejs不会更新,因为有package-lock.json⽂件,下⾯再说)。另外,package.json⽂件只记录你通过npm install⽅式安装的模块信息,⽽这些模块所依赖的其他⼦模块的信息不会记录。
  package-lock.json⽂件锁定所有模块的版本号,包括主模块和所有依赖⼦模块。当你执⾏npm install的时候,node从package.json⽂件读取模块名称,从package-lock.json⽂件中获取版本号,然后进⾏下载或者更新。因此,正因为有了package-lock.json⽂件锁定版本号,所以当你执⾏npm install的时候,node不会⾃动更新package.json⽂件中的模块,必须⽤npm install packagename(⾃动更新⼩版本号)或者npm install (指定版本号)来进⾏安装才会更新,package-lock.json⽂件中的版本号也会随着更新。
  顺便说⼀下:当package.json与package-lock.json都不存在,执⾏"npm install"时,node会重新⽣成package-lock.json⽂件,然后把node_modules中的模块信息全部记⼊package-lock.json⽂件,但不会⽣成package.json⽂件,此时,你可以通过"npm init --yes"来初始化⽣成package.json⽂件。
  总结:
  项⽬中引⼊的包版本号之前经常会加^号,每次在执⾏npm install之后,下载的包都会发⽣变化,为了系统的稳定性考虑,每次执⾏完npm install之后会创建或者更新package-lock⽂件。该⽂件记录了上⼀次安装的具体的版本号,相当于是提供了⼀个参考,在出现版本兼容性问题的时候,就可以参考这个⽂件来修改版本号即可。