Vue工程化配置指南:vue.config.js深度解析
一、初始化配置文件
在Vue CLI工程根路径下创建配置文件:
项目层级示意:
your-project/
├── src/
├── public/
├── package.json
└── vue.config.js # 新增配置文件
基本模板结构:
module.exports = {
// 工程化配置区域
}
二、核心配置参数解析
部署路径设置(publicPath)
功能说明:控制静态资源访问路径
预设值:开发环境'/',生产环境'/'
环境适配方案:
publicPath: process.env.NODE_ENV === 'production'
? '/cdn-path/'
: '/dev-path/'
构建产物路径(outputDir)
功能说明:指定编译输出目录
默认路径:'dist'
自定义示例:
outputDir: 'release'
资源存储路径(assetsDir)
功能说明:静态资源子目录设置
初始值:空字符串
配置案例:
assetsDir: 'assets'
三、开发环境调优
本地服务配置模板:
devServer: {
host: '0.0.0.0', // 开放IP访问
hotOnly: true, // 热更新控制
proxy: { // 接口代理
'/gateway': {
target: 'http://api.domain.com',
ws: true,
secure: false
}
}
}
四、Webpack深度定制
链式配置方法(chainWebpack)
应用场景:模块规则扩展
SVG图标处理案例:
chainWebpack: config => {
config.module
.rule('custom-svg')
.test(/\.svg$/)
.use('svg-loader')
.loader('svg-sprite-loader')
}
配置融合方法(configureWebpack)
功能特性:支持对象合并或函数式覆盖
生产环境专用配置:
configureWebpack: config => {
if (process.env.NODE_ENV === 'production') {
config.optimization.minimizer = [new TerserPlugin()]
}
}
五、进阶工程配置
样式预处理配置
css: {
modules: true, // 启用CSS模块化
loaderOptions: {
less: {
globalVars: {
primaryColor: '#1890ff'
}
}
}
}
多入口方案
pages: {
mobile: {
entry: 'src/mobile-entry.js',
chunks: ['vendor', 'mobile']
},
desktop: {
entry: 'src/desktop-entry.js',
chunks: ['vendor', 'desktop']
}
}
构建优化策略
{
filenameHashing: false, // 关闭哈希文件名
runtimeCompiler: true, // 启用运行时编译
transpileDependencies: ['vuex-persist'] // 特殊依赖转译
}
配置系统运作原理
- 配置叠加机制
采用webpack-chain实现配置链式管理
用户配置优先级高于CLI默认配置
数组合并策略为覆盖式而非追加式
- 环境变量注入流程
.env.local → .env.[mode] → 全局默认
- 构建过程阶段划分
基础配置(Base Config)
客户端构建(Client Build)
服务端渲染(SSR Build)
现代模式构建(Modern Build)
企业级配置参考
const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir)
}
module.exports = {
publicPath: './',
outputDir: 'dist',
assetsDir: 'static',
lintOnSave: process.env.NODE_ENV === 'development',
productionSourceMap: false,
devServer: {
port: 8080,
proxy: {
'/api': {
target: 'http://localhost:3000',
changeOrigin: true,
pathRewrite: { '^/api': '' }
}
}
},
chainWebpack: config => {
config.resolve.alias
.set('@', resolve('src'))
},
configureWebpack: {
plugins: [
// 自定义插件
]
},
css: {
extract: true,
loaderOptions: {
scss: {
additionalData: `@import "~@/styles/variables.scss";`
}
}
}
}
导出完整webpack配置
vue inspect --mode=stage > debug.config.js
查看特定规则配置
vue inspect module.rules.10
关键注意点
路径别名推荐使用@指向src目录
生产环境建议关闭sourcemap提升安全性
大文件加载推荐配置externals进行CDN引入
定期运行vue-cli-service build --report分析包体积
Reference:
Webpack 官方文档:https://webpack.js.org/
Vue CLI 配置参考:https://cli.vuejs.org/config/
webpack-chain 文档:https://github.com/neutrinojs/webpack-chain
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。