前端必看: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);
相关推荐
CDN36015 小时前
高防切换后网站打不开?DNS 解析与回源路径故障排查
前端·网络·数据库
信也科技布道师15 小时前
把7个页面变成1段对话:AI如何重构借款流程
前端·人工智能·重构·架构·交互·用户体验
276695829216 小时前
携程旅行 token1005
java·linux·前端·javascript·携程旅行·token1005·携程酒店
freewlt16 小时前
Cursor与AI编程工具崛起:前端工程师的能力模型重构与职业生存策略
前端·重构·ai编程
墨雪遗痕16 小时前
工程架构认知(三):从传统Web系统到AI大模型驱动系统
前端·人工智能·架构
C澒16 小时前
AI 生码 - PRD2CODE:Schema2PRD 全流程设计与实现
前端·ai编程
掘金者阿豪16 小时前
微信图片已过期或已被清理,真的找不回了吗?完整自救指南
前端·后端
颜酱16 小时前
从 DeepSeek 文本对话到流式输出
前端·javascript·人工智能
Ulyanov16 小时前
打造现代化雷达电子对抗仿真界面 第二篇:雷达电子对抗仿真系统核心功能实现
前端·python·信息可视化·数据可视化·系统仿真·雷达电子战
快乐小土豆~~16 小时前
上传视频时截取正脸照片
前端·音视频·vladmandic