前言:前几天接到一个小任务,须要给一个老项目增长一个小功能。这原本是个简单的活儿,可是因为是老项目,我本地没有,因而从仓库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
指定版本:好比 "antd": "3.10.7"或"antd": "=3.10.7",表示安装3.10.7的版本版本控制
~:好比 "antd": "~3.10.7",表示安装3.10.x的最新版本(不低于3.10.7),可是不安装3.11.x,也就是说安装时不改变大版本号和次要版本号code
^:好比 "antd": "^3.10.7",表示安装3.10.7及以上的版本,可是不安装4.0.0,也就是说安装时不改变大版本号。开发
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
也会同步更新。