前端必看:Vite.config.js 最全配置指南 + 实战案例

1. 文件概述

vite.config.js 是 moyu 项目的 Vite 构建配置文件,用于配置开发服务器、构建选项、插件系统等。该文件支持现代前端开发的快速热重载和高效构建。

2. 核心配置解析

2.1 插件系统 (Plugins)

java 复制代码
jslet pluginAry = [
  vue({ /* Vue 2 支持 */ }),
  vueJsx({}), // JSX 语法支持
  transformPlugin(), // 自定义转换插件
  htmlPlugin(), // HTML 处理插件
  eslintPlugin({ /* ESLint 集成 */ }),
  createI18nPlugin(), // 国际化插件
  legacyPlugin({ /* 兼容旧浏览器 */ }),
  ViteCodeInspectorPlugin({ /* 代码检查工具 */ }),
  viteExternalsPlugin({ /* 外部依赖配置 */ })
];

关键插件说明:

插件 功能
@vitejs/plugin-vue2 支持 Vue 2 项目
@vitejs/plugin-vue2-jsx 支持 Vue JSX 语法
transformPlugin() 自定义代码转换(位于 ./build/vite/transform.plugin.js
htmlPlugin() HTML 模板处理
eslintPlugin 开发时 ESLint 检查
legacyPlugin 生成兼容旧浏览器的代码
viteExternalsPlugin 将指定依赖作为外部库,不打包进 bundle

2.2 模块别名配置 (Alias)

javascript 复制代码
jsfunction getModuleAlias() {
  Object.keys(allModules).forEach(moduleName => {
    alias[moduleName] = path.resolve(__dirname, `./modules/${moduleName}/src/index.js`)
  });
}
getModuleAlias();

别名映射表:

  • '@'./src
  • '@modules'./modules
  • 'moyu-systemset-page'./modules/moyu-systemset-page/src/index.js
  • 'moyu-assetmanage-page'./modules/moyu-assetmanage-page/src/index.js
  • ...(其他子模块)

这与 Webpack 配置中的别名功能完全一致,确保模块导入的一致性。

2.3 开发服务器配置 (Server)

arduino 复制代码
jsserver: {
  port: 3001,
  host: getNetworkIp(), // 自动获取局域网 IP
  open: true, // 启动时自动打开浏览器
  cors: true, // 启用跨域
  proxy: {
    '/socket.io': { /* WebSocket 代理 */ },
    '/api': { /* API 代理,移除 /api 前缀 */ }
  },
  hmr: { overlay: true } // 热更新错误覆盖层
}

代理配置说明:

  • /socket.io: 转发到后端 WebSocket 服务
  • /api : 转发到后端 API 服务,并自动移除 /api 前缀

2.4 外部依赖配置 (Externals)

arduino 复制代码
jsviteExternalsPlugin({
  "echarts": "echarts",
  "vue": "Vue",
  "vuex": "Vuex",
  "SunflowerConfig": "SunflowerConfig",
  "SunflowerLangZH": 'SunflowerLangZH',
  "SunflowerLangEN": 'SunflowerLangEN',
  "three": "THREE",
  "moment": "moment",
  "moment-timezone": "moment-timezone",
})

作用:

  • 这些库不会被打包进最终的 bundle
  • 运行时从全局变量或 CDN 加载
  • 减少 bundle 体积,提升加载速度

2.5 环境变量定义 (Define)

java 复制代码
jslet define = {
  'process.env.NODE_ENV': '"development"',
  'process.env.VITE_ENV': true,
  'process.env.FORCE_DEPEND': false,
  'process.env.BASE_API': {}
}

这些变量在代码中可以通过 process.env.XXX 访问,用于条件编译和环境判断。

3. 与微前端架构的集成

3.1 模块动态加载

Vite 配置通过 getModuleAlias() 动态生成子模块别名,与 childModule.json 配置文件联动:

csharp 复制代码
js// childModule.json
{
  "moyu-systemset-page": { "open": true, "desc": "系统设置" },
  "moyu-assetmanage-page": { "open": true, "desc": "资产管理中心" }
}
​
// vite.config.js 自动生成
alias['moyu-systemset-page'] = './modules/moyu-systemset-page/src/index.js'
alias['moyu-assetmanage-page'] = './modules/moyu-assetmanage-page/src/index.js'

3.2 国际化支持

scss 复制代码
jsconst i18nConfig = require('./build/service/developI18nConfig.js');
i18nConfig.createFile('zh');
i18nConfig.createFile('en');
​
// 插件集成
createI18nPlugin()

启动时自动生成中英文语言包文件,支持运行时切换。

3.3 路由和生成器插件

ini 复制代码
jspluginAry.unshift(routerPlugin.plugin());
pluginAry.unshift(generatorPlugin.plugin());
pluginAry.unshift(wormholePlugin());
  • routerPlugin: 路由相关功能
  • generatorPlugin: 代码生成器
  • wormholePlugin: 可能是内部通信或数据隧道插件

4. 构建优化配置

4.1 依赖预构建

java 复制代码
jslet optimizeDeps = {
  include: Object.keys(pkg.dependencies), // 预构建所有依赖
  exclude: ["canvas"] // 排除 canvas
}

4.2 生产构建配置

arduino 复制代码
jsbuild: {
  target: 'es2015', // 目标 JavaScript 版本
  minify: 'terser', // 使用 terser 压缩
  manifest: false, // 不生成 manifest
  sourcemap: false, // 不生成 source map
  outDir: 'dist' // 输出目录
}

4.3 CSS 预处理器

yaml 复制代码
jscss: {
  preprocessorOptions: {
    less: {
      javascriptEnabled: true, // 支持 Less 中的 JavaScript
    }
  }
}

5. 与 Webpack 配置的对比

功能 Webpack 配置 Vite 配置
模块别名 resolve.alias resolve.alias
开发服务器 devServer server
代理配置 devServer.proxy server.proxy
插件系统 plugins 数组 plugins 数组
外部依赖 externals viteExternalsPlugin
环境变量 DefinePlugin define

6. 完整工作流程

arduino 复制代码
┌─────────────────────────────────────────────────────────────────────────┐
│  1. 启动 Vite 开发服务器 (npm run dev)                                 │
└─────────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────────┐
│  2. 执行 vite.config.js                                                 │
│     - 读取 childModule.json                                             │
│     - 生成模块别名                                                      │
│     - 创建国际化文件                                                    │
│     - 配置插件和服务器                                                  │
└─────────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────────┐
│  3. 启动开发服务器                                                      │
│     - 监听 3001 端口                                                    │
│     - 自动打开浏览器                                                    │
│     - 配置 API 代理                                                     │
└─────────────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────────────┐
│  4. 模块导入解析                                                        │
│     import 'moyu-systemset-page'                                       │
│     → 解析为 ./modules/moyu-systemset-page/src/index.js                │
│     → 执行 pushComponent() 注册模块                                     │
└─────────────────────────────────────────────────────────────────────────┘

7. 关键优势

特性 说明
快速启动 Vite 基于原生 ES 模块,无需打包即可运行
热重载 修改代码即时更新,开发体验极佳
现代化 支持最新前端技术栈和标准
兼容性 通过 legacy 插件支持旧浏览器
微前端友好 完美支持 moyu 的模块化架构
开发效率 内置 ESLint、代码检查等开发工具

8. 总结

vite.config.js 是 moyu 项目从 Webpack 迁移到 Vite 的关键配置文件,它:

  1. 保持了原有的微前端架构:通过动态别名配置支持子模块加载
  2. 提升了开发体验:利用 Vite 的快速启动和热重载特性
  3. 优化了构建性能:现代化的构建工具链
  4. 保持了功能完整性:国际化、路由、代理等核心功能全部保留

这个配置文件体现了 moyu 项目在保持架构稳定性的同时,积极拥抱现代前端工程化工具的演进策略。

二 全局注册组件**

javascript 复制代码
components/index.js文件
​
const globalComponents = {
    routerTabView: () => import('./router-tab-view/RouterTabView.vue'), // 路由tab菜单组件
    pageFootWrap: () => import('./page-foot-wrap/pageFootWrap.vue'), // 页面底部固定组件样式组件
}
​
function install(Vue) {
    Object.keys(globalComponents).forEach((componentName) => {
        Vue.component(componentName, globalComponents[componentName]);
    });
}
export default {
    install
}
​
​
main.js 文件
import GlobalComponents from './components/index.js';
GlobalComponents.install(Vue);
相关推荐
ZC跨境爬虫6 小时前
跟着 MDN 学CSS day_39:(Flexbox 弹性盒子核心机制)
前端·css·ui·html·tensorflow
小陈同学呦6 小时前
前端如何处理订单状态导航的数据竞态问题
前端·javascript
喵个咪7 小时前
GoWind Toolkit 前端代码生成|Vue3(ElementPlus/Vben)、React(AntDesign)全自动一键生成教程
前端·vue.js·react.js
摆烂大大王8 小时前
玩转 OpenClaw:用 TaskFlow + Heartbeat 打造自动化工作流
前端·人工智能·自动化
zhangxingchao8 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
梦想的颜色8 小时前
TypeScript 完全指南(上):从零开始掌握类型系统
前端·typescript
之歆9 小时前
Day01_ES6+ 专业指南:从基础到实战的现代JavaScript开发(下)
前端·javascript·es6
lichenyang4539 小时前
鸿蒙 MVVM 实战:从 Demo 到工程化,聊聊登录、状态管理与埋点系统设计
前端
IT_陈寒9 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端
kyriewen9 小时前
AI生成代码快如闪电,但我修了三个小时——它到底帮了谁?
前端·javascript·ai编程