vue-cli迁移rspack记录

rspack出来也这么久了,吹捧的文章也看多了,今天终于得空,尝试迁移了公司三年前用vue-cli搭建的vue2项目,虽然结果不尽人意,但还是留文当作记录吧。

迁移流程

rspack对标webpack(详细对比可参照这里),rebuild内置了很多基础配置,也就类似于vue-cli,所以这次直接用rebuild进行迁移。

1. **依赖配置 **

首先按照官方提供的vue-cli迁移记录升级依赖

npm remove @vue/cli-service @vue/cli-plugin-babel @vue/cli-plugin-eslint core-js
npm add @rsbuild/core @rsbuild/plugin-vue -D

增加rsbuild.config.ts文件替换vue.config.js

2. plugins配置
plugins: [
    pluginVue2(),
    pluginNodePolyfill(),
    pluginSass({
        sassLoaderOptions: {
            // additionalData: `
            //     @import '@/assets/styles/common/_mixin.scss';
            //     @import '@/assets/styles/common/wukong.scss';
            // `
            additionalData: (content, loaderContext) => {
                const { resourcePath } = loaderContext;
                // sass-loader ^10.x.x以上bug,会重复处理预加载的文件
                if (resourcePath.includes('_mixin.scss') || resourcePath.includes('wukong.scss')) return "";
                return `
                    @import '@/assets/styles/common/_mixin.scss';
                    @import '@/assets/styles/common/wukong.scss';
                    ${content}
                `;
            },
            // 使用最新版本的sass-embedded有问题 https://github.com/element-plus/element-plus/issues/17487
            implementation: require.resolve('sass'),
        },
    })
],
  • pluginVue2: rspack处理vue2的插件,编译vue内容

  • pluginNodePolyfill: 编译nodejs的原生模块,使得能在浏览器环境中执行。因为项目中有依赖使用了nodejs的net模块,故而需要引入

 

根据其文档说明,net模块在浏览器环境无法实现,会被编译为空对象 

  • pluginSass 用来处理sass的插件,也是内置了很多配置,可以开箱即用的。但是比较坑的是,在使用的过程中,其自带的sass-embedded存在问题,不得已另外下载了sass插件来编译。并且其sass-loader的版本也很新,从原来项目的8.x直接到16.x。
3. tools配置
tools: {
    rspack: (config, { addRules }) => {
        config.resolve = {
            ...config.resolve,
            alias: {
                ...config.resolve?.alias,
                '@': path.resolve(__dirname, './src'),
            }
        };
        if (config.module && config.module.rules) {
            config.module.rules.push({
                test: /\.html$/,
                // 编译html,转成render函数或修饰器模式
                loader: require.resolve('vue-template-loader'),
                options: {
                    // https://www.npmjs.com/package/vue-template-babel-compiler 处理?. ??等特性
                    compiler: require("vue-template-babel-compiler")
                }
            })
        }
    }
}

ools.rspack就是修改rebuild中的rspack配置项的,类似于vue-cli中的webpack配置.上面也就配了个alias别名。然后加了个vue-template-loader用来处理html文件(用的vue-class-component,所以用html文件,代替vue中的template标签),用vue-template-babel-compiler处理html中es6的相关逻辑。

分析

修改完上面这些配置后,服务终于跑起来了。

然后打开站点一看:白屏加报错

应该是vue-class-component插件的报错,全网找不到处理方案,感觉这次升级也就到此为止了。

虽然最终没有成功,但是至少能看看项目编译速度

rsbuild:

vue-cli:

快了5倍多,速度还是没得说的,可惜看不到热更新情况和打包效果了,而且感觉生态也有待扩展呀~

原文:https://juejin.cn/post/7424001170275434533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值