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

  1. yarn add vite vite-plugin-html vite-plugin-vue2 @originjs/vite-plugin-require-context -D
  2. // package.json 添加指令
  3. "scripts": {
  4. "vite": "vite"
  5. }

根节点创建vite.config.js

  1. import { defineConfig } from "vite";
  2. import path from "path";
  3. import { createVuePlugin } from "vite-plugin-vue2";
  4. import { createHtmlPlugin } from "vite-plugin-html";
  5. import ViteRequireContext from "@originjs/vite-plugin-require-context"
  6. function resolve(dir) {
  7. return path.join(__dirname, "./", dir)
  8. }
  9. export default defineConfig({
  10. root: "./",
  11. publicDir: "public",
  12. base: "./",
  13. mode: "development",
  14. optimizeDeps: {
  15. include: []
  16. },
  17. resolve: {
  18. alias: {
  19. "@": resolve("src"),
  20. "@img": resolve("src/assets/images"),
  21. "@components": resolve("src/components"),
  22. "@view": resolve("src/view"),
  23. "@service": resolve("src/service"),
  24. "@lib": resolve("src/lib"),
  25. "@envPath": resolve("src/environments/environment.test.js"),
  26. "~": path.join(__dirname, "node_modules"),
  27. },
  28. extensions: [".mjs", ".js", ".ts", ".jsx", ".tsx", ".json", ".vue"] //解决vite一定要.vue组件问题
  29. },
  30. plugins: [
  31. cjs2esmVitePlugin(),
  32. createVuePlugin({
  33. jsx: true,
  34. jsxOptions: {
  35. injectH: false,
  36. compositionAPI: true
  37. },
  38. }),
  39. createHtmlPlugin({
  40. minify: true,
  41. entry: "src/main.js",
  42. template: "public/index.html", //指定index.html路径
  43. inject: {
  44. data: {
  45. title: "index",
  46. injectScript: "<script src=\"./inject.js\"></script>",
  47. },
  48. tags: [
  49. {
  50. injectTo: "body-prepend",
  51. tag: "div",
  52. attrs: {
  53. id: "tag"
  54. }
  55. }
  56. ]
  57. }
  58. }),
  59. ViteRequireContext()
  60. ],
  61. define: {
  62. "process.env": process.env
  63. },
  64. server: {
  65. port: 3001,
  66. proxy: {}
  67. }
  68. });

启动

yarn vite

然后就看项目具体报错信息、一步一步改动、因为vite太快了、所以都是值得的。

踩坑笔记

组件使用render语法

image.png

  1. createVuePlugin({
  2. jsx: true, // 开启jsx
  3. jsxOptions: {
  4. injectH: false,
  5. compositionAPI: true
  6. },
  7. }),

解决: 在组件