@vue/compiler-sfc跟vue的版本问题,以及版本^跟~的区别

21,305 阅读1分钟

在vue3+vite项目中,我尝试将vue的版本的锁住

"vue": "3.1.4"  //这里锁住了
"@vue/compiler-sfc": "^3.1.4"  //但是这里忘了锁住

编译时便报了错误: Uncaught SyntaxError: The requested module '/node_modules/.vite/vue.js?v=462ca772' does not provide an export named 'createElementBlock'

最后找到问题的原因是因为,@vue/compiler-sfc的3.2版本跟vue3.1版本不兼容导致。

解决方案:

//只锁住大版本,让它跟@vue/compiler-sfc自动同步升级小版本,两个都使用^
"vue": "^3.1.4"  
"@vue/compiler-sfc": "^3.1.4"  

//两个都锁住小版本
"vue": "3.1.4"  
"@vue/compiler-sfc": "3.1.4"  

版本控制:

在lock文件可能会被删除的情况下,如果使用^或者~ 可能都会引发版本问题:

^ 只能锁住第一位数,^3.1.4,最新版本如果升级到了3.2,在没有lock文件的情况下,会自动下载3.2版本的,只会下载最新,不会往低版本下载

~ 锁住前两位,原理同上

版本锁定方案:

  1. package.json中固定版本
  2. npm+package-lock.json
  3. yarn+yarn-lock.json
  4. yarnyarn.locknpmpackage-lock.json 对“锁定依赖版本”表现不同,package-lock.json 的“锁定效果”更可靠。当市场有比 yarn.lock 中更新的版本,且 package.json 中存在 ^ ~ 允许更新,那么 yarn 会自动安装比 yarn.lock 更新的版本并且主动修改 yarn.lock,而 npmpackage-lock.json则不会。

注意:cnpm不支持版本锁定,也就是package-lock.json这些文件对它无效

[nvm 管理 npm 模块参考](使用nvm管理node版本 - 掘金 (juejin.cn))