将vue2+webpack 开发环境转为vite


webpack打包项目过大,慢且容易内存溢出。哭唧唧

步骤

当前只是vite的开发环境踩坑,项目目前依旧保持webpack打包
vite需要node版本为12及以上,当前 v12.12.0

1、安装vite相关的包

npm install vite -D
npm install @vue/compiler-sfc -D
npm install vite-plugin-vue2 -D

2、新建vite.config.js

proxy 代理 rewrite而非pathWrite;cjs2esmVitePlugin 包将 commonjs 转化为 es module;resolve.extensions中添加对应后缀

import {defineConfig} from 'vite'
import {createVuePlugin} from 'vite-plugin-vue2'
import {resolve} from 'path'
import { cjs2esmVitePlugin } from 'cjs2esmodule'

function pathResolve(dir) {
  return resolve(process.cwd(), '.', dir)
}

export default defineConfig({
  server: {
    port: '7010',
    proxy: {
      '/user': { 
        target: 'http://localhost:8051/',
        secure: true,
        changeOrigin: true,
        rewrite: path => path.replace(/^\/user/, 'user') // 路由这里vite用的是rewrite而非pathWrite,需注意调整
      },
    }
  },
  plugins: [
    createVuePlugin({
      vueTemplateOptions: {}
    }),
    cjs2esmVitePlugin(), // 将 commonjs 转化为 es module
  ],
  resolve: {
  // 文件后缀省略导致页面报错404(例:vue文件引入时,webpack只需要文件名),在vite.config.js配置resolve.extensions中添加对应后缀,vite默认有['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json']。
    extensions: ['.vue', '.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'],
    alias: {
      // vue2项目别名一般都是@,vue3中一般使用/@/, 为方便使用
      '@': resolve('src')
    }
  }
})

3、index.html引入main.js

<script type="module" src="/src/main.js"></script>

4、main.js引入App.vue方式调整

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
  // template: '<App/>',
  // components: {
  //   App
  // }
});

5、调整自定义模块、路由引入方式:require -> import、export default

路由有三种动态引入方式,采用import方式

// component: resolve => require(['@/mods/voucher/container_community.vue'], resolve), // 导航
  component: () => import(/* webpackChunkName: "container_community" */ '@/mods/voucher/container_community.vue'),

开发时,有一些组件引入公共文件require方式,调整为import引入

6、script添加命令

"vite": "vite",
"debug": "vite --debug", // 刚开始切换的时候还是很需要debug的

参考资料

Vue2老项目使用vite2升级
动态路由多种方式

<think>嗯,用户现在用的是Vue2Webpack,想迁移到Vue2Vite。首先,我需要确认Vite是否支持Vue2。记得之前Vite主要针对Vue3,但可能有插件可以支持Vue2。没错,有个vite-plugin-vue2,应该可以处理。 接下来,用户需要知道如何开始迁移。首先应该创建一个新的Vite项目,然后逐步迁移现有代码。可能需要安装必要的依赖,比如vitevuevite-plugin-vue2。然后调整配置文件,比如vite.config.js,设置插件和别名。原来的Webpack配置中的别名可能需要转换到Vite的配置里,这部分需要检查。 然后,入口文件可能有所不同。Vite通常使用index.html作为入口,通过ES模块加载main.js,而Webpack可能用了不同的方式。用户需要把index.html中的脚本引用改为模块形式,比如加上type="module"。同时,public目录的结构可能有变化,需要确认静态资源的路径是否正确。 接下来,处理Vue特有的文件。单文件组件应该没问题,但如果有使用Webpack特定的语法,比如某些loader或特殊配置,可能需要调整。比如,如果在Webpack里用了require.context,Vite可能需要用import.meta.glob来代替,这部分需要代码调整。 然后,环境变量的处理。Vite使用import.meta.env,而Webpack用的是process.env。用户需要将环境变量前缀改为VITE_,并更新代码中的引用。这可能涉及到一些全局替换,需要注意别漏掉地方。 构建和调试命令也需要改,用vite代替webpack的命令,比如dev和build。还有,第三方库的兼容性,尤其是那些依赖Node.js特性或Webpack特定功能的库,可能需要额外配置或替换。比如,使用vite-plugin-require-transform来处理require语句,但可能带来性能问题,需要注意。 可能遇到的问题包括旧插件不兼容,需要找Vite替代品,或者手动解决。UI库如Element UI可能需要调整加载方式,按需引入可能需要使用vite-plugin-style-import之类的插件。还有测试工具,比如从Jest切换到Vitest,可能需要配置。 最后,建议逐步迁移,先尝试新项目,再迁移旧项目,分模块处理,同时备份代码。这样风险较小,方便回滚。用户可能关心具体步骤和工具是否存在,需要明确列出可用插件和命令,确保他们能一步步操作。</think>将 Vue2 + Webpack 架构迁移到 Vue2 + Vite 是可行的,但需要逐步调整配置和依赖。以下是具体步骤和工具指南: --- ### 一、迁移前的准备 1. **检查兼容性** - Vite 官方对 Vue3 支持更好,但可通过社区插件 [`vite-plugin-vue2`](https://github.com/underfin/vite-plugin-vue2) 支持 Vue2。 - 确保项目依赖(尤其是第三方库)与 Vite 兼容,避免依赖 Node.js 特有 API 或 Webpack 特性。 2. **创建新 Vite 项目(可选)** 快速初始化一个干净的 Vue2 + Vite 项目作为参考: ```bash npm create vite@latest my-vue2-vite --template vue-2 ``` 如果官方模板不可用,可手动配置。 --- ### 二、迁移核心步骤 #### 1. **安装依赖** 替换 Webpack 相关依赖为 Vite 的核心包: ```bash npm remove webpack webpack-dev-server vue-loader # 移除旧依赖 npm install vite vite-plugin-vue2 @vue/compiler-sfc --save-dev ``` #### 2. **配置文件迁移** - **新建 `vite.config.js`** 替换原有的 `webpack.config.js`,配置 Vite 插件和别名: ```javascript import { defineConfig } from 'vite' import { createVuePlugin } from 'vite-plugin-vue2' export default defineConfig({ plugins: [createVuePlugin()], resolve: { alias: { '@': path.resolve(__dirname, './src') // 兼容原 Webpack 别名 } } }) ``` - **调整 `index.html`** Vite 将 `index.html` 作为入口,确保正确引用 JS 文件: ```html <!-- 原 Webpack 可能使用 --> <script src="/dist/main.js"></script> <!-- Vite 需改为 --> <script type="module" src="/src/main.js"></script> ``` #### 3. **代码适配** - **环境变量** Vite 使用 `import.meta.env` 替代 `process.env`,需将环境变量前缀改为 `VITE_`: ```env # 原 Webpack VUE_APP_API_URL=xxx # Vite VITE_API_URL=xxx ``` 代码中通过 `import.meta.env.VITE_API_URL` 访问。 - **动态导入与静态资源** Vite 使用 ES 模块语法,替换 `require()` 为 `import`,静态资源路径需调整: ```javascript // 原 Webpack const image = require('./assets/image.png') // Vite const image = new URL('./assets/image.png', import.meta.url).href ``` #### 4. **处理 Webpack 特有功能** - **`require.context`** 使用 Vite 的 `import.meta.glob` 替代: ```javascript // Webpack const modules = require.context('./modules', true, /\.js$/) // Vite const modules = import.meta.glob('./modules/**/*.js') ``` - **CSS 预处理器** 直接安装对应的预处理器(如 `sass`)即可,Vite 内置支持: ```bash npm install sass --save-dev ``` --- ### 三、工具与插件推荐 1. **核心插件** - [`vite-plugin-vue2`](https://github.com/underfin/vite-plugin-vue2): Vue2 单文件组件支持。 - [`vite-plugin-require-transform`](https://github.com/WarrenJones/vite-plugin-require-transform): 临时解决 `require` 兼容问题(慎用)。 2. **UI 库按需加载** 如使用 Element UI,推荐 [`vite-plugin-style-import`](https://github.com/anncwb/vite-plugin-style-import): ```javascript // vite.config.js import styleImport from 'vite-plugin-style-import' export default defineConfig({ plugins: [ styleImport({ libs: [{ libraryName: 'element-ui', esModule: true, ensureStyleFile: true, resolveStyle: (name) => `element-ui/lib/theme-chalk/${name}.css`, resolveComponent: (name) => `element-ui/lib/${name}` }] }) ] }) ``` 3. **调试与构建** - **开发环境**:`vite dev` - **生产构建**:`vite build` - **预览**:`vite preview` --- ### 四、常见问题 1. **旧插件不兼容** 逐步替换 Webpack 插件,寻找 Vite 替代品(如 `rollup-plugin-*`)。 2. **路径问题** 检查 `public` 目录和静态资源引用,Vite 默认将 `/public` 映射为根路径。 3. **Polyfill 缺失** 在 `vite.config.js` 中通过 `@vitejs/plugin-legacy` 添加传统浏览器支持。 --- ### 五、验证与测试 1. **逐步运行** 分模块迁移,优先验证核心功能。 2. **性能对比** Vite 的冷启动和热更新速度应有显著提升。 通过以上步骤,你可以平稳地将项目迁移到 Vue2 + Vite 架构。如遇复杂问题,建议先在小规模项目中实验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值