vue的版本迭代非常快,一直让人追赶的节奏(今年要发vue 3.0)。
在使用了vue-cli一段时间后,发现了vue-cli包括cli-server的更新频率非常快,经常修复bug。于是乎也想更细一下相关的组件,但是发现vue upgrade这个命令似乎还不能正常工作,见 feat: implement vue upgrade #2428。
手动再用vue create 一个新的工程比较了下package.json,发现就更新了几个组件,手动更新一下。由于package-lock.json的存在,直接用npm install 某一个组件是不会顺带更新其依赖的组件的。比如手动升级了vue,但是vue-template-compiler没有跟着升级,运行时会报版本不匹配。
最为简单粗暴的办法是删除package-lock.json和node_modules,然后修改package.json中的需要升级的组件版本号,然后再npm install 一遍就好,这时会重新生成package-lock.json。
主要是以下依赖包升级版本:
vue
@vue/cli-plugin-babel
@vue/cli-plugin-eslint
@vue/cli-service
这里不忍吐槽下package-lock.json的设计,为了解决依赖管理版本不一致的而产生的。反而在组件版本升级时成立畔脚石。
这是由于npm的包管理在考虑组件的依赖和频繁升级特点,采用了^这样高于某版本的语义(语义版本控制 semver)。导致了项目在依赖库安装时的版本不确定性。这样的设计为了方便而带入不确定因素会导致bug和安全风险,我认为这不是一个好的思路。
特别是对npm audit fix的安全检查升级执行造成了干扰,导致无法包依赖的包无法正确升级。于是出现了这样的命令。(这是何苦……)
$ npm audit fix --package-lock-only