问题1
尝试将taro框架的小程序从vue2升级到vue3
直接安装vue3的版本会报如下错误
根据提示我使用的vue-loader版本是15.9.2,应该更新vue-template-compiler版本,但是发现vue-template-compiler最新版本就是2.版本。所以更新vue-template-compiler并不能解决问题
解决办法
将package.json中vue2和vue-template-compiler删掉,添加@vue/compiler-sfc、vue3和vue-loader16以上版本(代码替换如下,package.json中不可以写注释所以直接删掉即可),将package-lock.json删掉,将node_modules文件夹删掉,重新执行npm i命令即可
如果还是报错,可以查看node_modules中vue-template-compiler是否删除成功
"dependencies": {
// "vue": "^2.5.0",
// "vue-template-compiler": "^2.5.0"
"vue": "^3.2.47"
}
"devDependencies": {
"@vue/compiler-sfc": "^3.2.47",
"vue-loader": "^17.0.0",
}
因为在vue2的解决方案是 保持 vue 跟 vue-template-compiler版本一致即可解决。
而在vue3 里面,已经不是用 vue-template-compiler了,是用另外一个包了 @vue/compiler-sfc,而且vue-loader要指定16以上的版本。vue-loader为什么要指定16以上的版本?请看附加问题
问题2
启动小程序发现页面又报错如下
找了好久发现配置的地方在config文件夹的index文件中,修改framework: 'vue3',即可
问题3
问题又来了,启动小程序控制台报错如下
根据提示安装npm i @tarojs/plugin-framework-vue3即可。
你以为这样就结束了吗?no no no
问题4
控制台成功了,但发现页面又报错了
首先看报错信息,好像是和webpack有关,但是又不知道怎么解决,我们可以使用命令taro init myApp重新创建一个vue3的项目,创建好后查看app.js,发现新项目的app.js中提到不需要实现render方法,于是我们根据新项目来修改我们自己的项目,使用createApp
这回真的是大功告成了。项目可以启动了,下面附加一个问题
附加问题
如果vue-loader没有指定16以上的版本,此时就会出现下面问题
并且,在每次安装其他包时(即每次执行npm i xxx)就会出现问题1,因为vue-loader15版本中依赖的就是vue-template-compiler,所以要升级vue-loader到16以上的版本。 升级之后,就可以正常运行了
Vue Loader 是一个 webpack 的 loader,它允许你以一种名为单文件组件 (SFCs)的格式撰写 Vue 组件
作用: 解析和转换 .vue 文件,提取出其中的逻辑代码 script、样式代码 style、以及 HTML 模版 template,再分别把它们交给对应的 Loader 去处理。
npm安装时-S -D的区别是什么?
1.-S即–save(保存)
包名会被注册在package.json的dependencies里面,在生产环境下这个包的依赖依然存在。
2.-D即–dev(开发)
包名会被注册在package.json的devDependencies里面,仅在开发环境下存在的包用-D,如babel,sass-loader这些解析器