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, // 开启jsx
jsxOptions: {
injectH: false,
compositionAPI: true
},
}),
解决: 在组件