如何在vue3中使用element-ui?node-sass老项目踩坑
情况
同学买了一个项目,依赖搞半天运行不起来。
先说标题的结论,vue3中无法使用elementui,如果项目中有elementui,那么这个项目是一个vue2项目,应该把依赖改成vue2而不是3。
首先是node-sass,中途需要python2的环境和windows的c++组件(msbuild)。
为了避免更多麻烦,我使用了npm而不是pnpm和yarn甚至bun。
过程
node版本过高
- 安装fnm,安装完后需要配置
终端打开powershell,使用vscode编辑powershell的配置文件(powershell登录时会运行这个文件,和linux的profile差不多)
code $profile
内容如下:
fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression
弄完后一直爆红,一看是path中有多余的;分号,应该是以前遗留的环境。
2. 切换到node的v16版本
fnm use 16
版本不匹配
vue3和element不匹配。直接不让运行npm i命令,于是乎使用下面的--legacy-peer-deps选项,虽然没有解决问题,但是至少命令跑下去了。
npm i --legacy-peer-deps
卡在core-js
似乎不是网络的原因。
先前卡在这里我换了cnpm,但是换了cnpm后总是说缺少某个依赖,我怀疑是他的.store目录结构的影响。
cnpm将依赖放在node_modules的.store目录下,如果某些node模块中有利用幽灵依赖bug的写法,那么有可能有问题(我猜的),然后我就换回了npm。
设置淘宝镜像后,使用npm
npm config set registry https://registry.npmmirror.com
core-js卡得莫名其妙,遇到这个我就删了node_modules重新install。
有时候windows的rm命令会提示某些文件不存在,我们一般使用rimraf来删除文件。
npm i -g rimraf
rimraf node_modules
node-sass依赖问题
换到node16后,他提示需要python2依赖,于是去python官网装了个python2。
gcm python
如果正常,则下图应该显示2.xx的版本,比如2.7.xx。下图只是示例,3.x版本是不对的。

msbuild
https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
我装完2022的相关c++依赖,发现没有作用。
然后网上搜了一下,有说用
windows-build-tools这个npm包的。
https://github.com/felixrieseberg/windows-build-tools
npm i -g windows-build-tools
过程中,跳出来Visual Studio Installer,但是我没关闭之前的窗口于是运行失败了。

后面我再打开Visual Studio Installer,发现多出一个名称类似于Visual Studio 5 生成工具的选项,于是我点击修改,由于前面中断,因此这里都下好了。

类似于下面这样,初始就会有要求的总空间。

核心的依赖就是win10 sdk和MSVC 2017,大致是下面这样,另外还需要重启。

下面这个路径中会出现2017

找到类似下面这个路径(这里是2022因此不太一样,建议在文件管理器中看一看),加到Path里面。
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin
由于vscode的环境变量不会跟着更新,所以建议用powershell终端来验证。
好像还需要重启一下。
到这里基本上node-sass就能安装成功了,项目能跑起来了。
页面空白
运行项目后发现:
Vue.use语句中,use为undefined报错。
实际上打印出来Vue也是undefined。
简单来说就是,项目中使用的依赖是vue3的,但是写法是vue2的,因此出错。
于是我写了vue3的写法,大致如下(省略了VueRouter)
import {createApp} from 'vue';
import App from '../App.vue';
const app = createApp();
app.use(App);
然后项目还是有问题。
然后我把依赖直接改成vue2,她妈的一切正常了。
写这个项目的人是不是脑子有问题?
npm i vue@2

浙公网安备 33010602011771号