vue2把webpack框架迁移到Vite、我们在尽量不改变源代码的基础上只增加Vite的配置项、使得也能进行开发处理!下面就来了解下我们在迁移的过程需要做的事情!
什么项目适合迁移Vite
- 大型vue2 的系统、启动慢、改动文件响应慢
- 内部系统 - 无需大型流量场景:因为 vite 迭较快,导致系统需要定期改动基础功能,造成不稳定
- 非 ssr 系统 - ssr 还有很多问题,暂且等社区丰富起来
- 定期有人维护的系统
- 对开发有痛点而想要改进:比如打包慢,冷启动慢,HMR 更新慢
- vite 生产环境用 rollup,但是改造成本大,提效不高,风险大,暂不建议使用
安装所需要的依赖包
这是我的依赖包的版本、如果使用不了建议下载指定版本包
“vite”: “^2.8.6”,
“vite-plugin-html”: “^3.2.0”, //指定index.html位置插件
“vite-plugin-vue2”: “^1.9.3”, // 专门用来支持 vue2 的插件、来自vite团队人员开发、支持JSX
“@originjs/vite-plugin-require-context”: “^1.0.9” // 解决require.context问题
cjs2esmodule //可选,将 commonjs 转化为 es module
yarn add vite vite-plugin-html vite-plugin-vue2 @originjs/vite-plugin-require-context -D// package.json 添加指令"scripts": {"vite": "vite"}
根节点创建vite.config.js
import { defineConfig } from "vite";import path from "path";import { createVuePlugin } from "vite-plugin-vue2";import { createHtmlPlugin } from "vite-plugin-html";import ViteRequireContext from "@originjs/vite-plugin-require-context"function resolve(dir) {return path.join(__dirname, "./", dir)}export default defineConfig({root: "./",publicDir: "public",base: "./",mode: "development",optimizeDeps: {include: []},resolve: {alias: {"@": resolve("src"),"@img": resolve("src/assets/images"),"@components": resolve("src/components"),"@view": resolve("src/view"),"@service": resolve("src/service"),"@lib": resolve("src/lib"),"@envPath": resolve("src/environments/environment.test.js"),"~": path.join(__dirname, "node_modules"),},extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"] //解决vite一定要.vue组件问题},plugins: [cjs2esmVitePlugin(),createVuePlugin({jsx: true,jsxOptions: {injectH: false,compositionAPI: true},}),createHtmlPlugin({minify: true,entry: "src/main.js",template: "public/index.html", //指定index.html路径inject: {data: {title: "index",injectScript: "<script src=\"./inject.js\"></script>",},tags: [{injectTo: "body-prepend",tag: "div",attrs: {id: "tag"}}]}}),ViteRequireContext()],define: {"process.env": process.env},server: {port: 3001,proxy: {}}});
启动
yarn vite
然后就看项目具体报错信息、一步一步改动、因为vite太快了、所以都是值得的。
踩坑笔记
组件使用render语法

createVuePlugin({jsx: true, // 开启jsxjsxOptions: {injectH: false,compositionAPI: true},}),
解决: 在组件
