package.json和package-lock.json

前言:前几天接到一个小任务,须要给一个老项目增长一个小功能。这原本是个简单的活儿,可是因为是老项目,我本地没有,因而从仓库clone下来,一顿操做以后,npm start却跑不起来,报的错是依赖的版本有问题,因而开始了漫长的踩坑之路。node

  • 首先是删除node_modules从新npm install,这彷佛跟重启同样好用,但仍是报错,卒
  • 而后固定依赖的版本,仍然报错,原来是第三方依赖中引用的依赖版本有问题,卒
  • 经过问老大,查资料等方式了解到package-lock.json文件能够控制版本,可是仓库里并无这个文件,好在同事有,满心欢喜再次npm install,成功!!!

其实还有个小插曲,我以前一直用的cnpm,因此并不会根据package-lock.json安装依赖,查阅资料后决定弃用cnpm,配置镜像后再次启用npm。建议你们仍是使用官方的npm,配置镜像以后速度也还能够接受,第三方的可能会不少坑。npm

虽然看起来好像没多少技术含量,可是一开始因为思考的方向有点误差,致使浪费了不少时间。仔细衡量了下仍是记录下来。如下是一些笔记:json

版本控制规则

a.b.c:a表示主版本号,b表示次版本号,c表示补丁更新。当你只是简单的修复了bug, 当没有添加任何新功能,或者修改旧功能时, 就更新补丁号;当添加了新的功能, 但没有破坏原有的功能,就更新次版本号;当作了重大修改,致使新版本不兼容旧代码时,就更新主版本号。antd

package.json版本控制

  1. 指定版本:好比 "antd": "3.10.7"或"antd": "=3.10.7",表示安装3.10.7的版本版本控制

  2. ~:好比 "antd": "~3.10.7",表示安装3.10.x的最新版本(不低于3.10.7),可是不安装3.11.x,也就是说安装时不改变大版本号和次要版本号code

  3. ^:好比 "antd": "^3.10.7",表示安装3.10.7及以上的版本,可是不安装4.0.0,也就是说安装时不改变大版本号。开发

package-lock.json

package-lock.json的做用就是用来保证咱们的应用程序依赖之间的关系是一致的,兼容的;适合多人协做开发时保证每一个人的依赖版本是一致的同步

当项目中不存在package-lock.json文件时,使用npm install时会自动生成这个文件。当package-lock.json存在时,则会安装文件中指定版本的依赖,而且安装速度会比不存在此文件时快不少。由于package-lock.json中已经存在依赖的版本,下载地址和整个node_modules的文件结构等信息。class

使用yarn一样也会自动生成package-lock.json文件,可是cnpm不会自动生成,而且也不会读取package-lock.json文件,只根据package.json下载依赖。module

更新依赖

在npm 5.x以前,咱们能够直接更改package.json中的版本号,再npm install就能够直接更新了,可是5.x以后因为是根据package-lock.json安装依赖,因此咱们只能使用npm install xxx@x.x.x去更新依赖,这样package-lock.json也会同步更新。

相关文章
相关标签/搜索