代码片段来自 Vue2 的教程,电商后台管理系统
js
module.exports = {
chainWebpack: (config) => {
// 链式操作 webpack 配置的。
// 它根据环境变量 process.env.NODE_ENV 的值来决定是否应用接下来的配置。
config.when(process.env.NODE_ENV === 'production', (config) => {
// 清除入口文件并添加生产环境下的主入口文件 main - prod.js。
config.entry('app').clear().add('./src/main-prod.js')
// 设置外部依赖,这些依赖将不会被打包,而是在运行时从全局变量中获取
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
echarts: 'echarts',
lodash: '_',
nprogress: 'NProgress',
'vue-quill-editor': 'VueQuillEditor'
})
// 使用配置 html-webpack-plugin 插件 生成发布html入口
// 通过 tap 方法修改 html - webpack - plugin 插件的配置,给生成的 HTML 模板添加一个 isProd 参数。
config.plugin('html').tap(args => {
// 添加参数isProd
args[0].isProd = true
return args
})
})
// config.when(process.env.NODE_ENV === 'development', (config) => {
// config.entry('app').clear().add('./src/main-dev.js')
// })
config.when(process.env.NODE_ENV === 'development', (config) => {
config.entry('app').clear().add('./src/main-dev.js')
config.plugin('html').tap((args) => {
args[0].isProd = false
return args
})
})
},
publicPath: './'
}
这段代码是 Vue CLI 项目中的 vue.config.js
配置文件的一部分,它使用链式操作来定制 webpack
的构建配置。下面是对代码中使用的打包策略的分析,以及为什么这样使用和它的潜在好处:
1. 环境依赖的入口文件
- 生产环境:当
process.env.NODE_ENV
等于'production'
时,webpack
配置会被修改以使用./src/main-prod.js
作为项目的主入口文件。这允许开发者为不同环境使用不同的主文件,通常是因为生产环境可能需要包含额外的优化代码,如应用初始化的性能优化。 - 开发环境:相应地,开发环境使用
./src/main-dev.js
作为主入口文件。开发环境中的入口文件可能包含额外的调试代码或者排除生产环境的特定代码。
2. 外部依赖配置
config.set('externals', {...})
:这行代码设置了webpack
的externals
配置。指定的依赖(如 Vue、axios 等)在构建时不会被包含在最终的打包文件中(在public/index.html
中通过判断环境变量进行 cdn 链接加载)。这意味着这些库将被视为外部依赖,在运行时从全局变量中导入。这样做的好处包括:- 打包体积缩小:由于这些库不会被打包进最终的文件,因此可以减少打包体积,加快构建速度。
- 缓存利用:如果这些库已经被其他网站使用,那么浏览器可能会从缓存中提供它们,减少加载时间。
- 版本控制:全局依赖通常会由用户或管理员在全局范围内更新,因此你可以避免在应用打包中包含这些库的特定版本。
3. HTML 插件配置
config.plugin('html').tap(args => { ... })
:这段代码通过tap
方法修改html-webpack-plugin
的配置。这个插件用于生成 HTML 文件,并在生产环境中向生成的 HTML 模板添加一个isProd
参数。这可能用于在构建后的 HTML 中启用或禁用某些特性,例如:- 在生产环境中移除调试工具或额外的日志输出。
- 启用服务端渲染(SSR)或预渲染(prerendering)的特定行为。
4. publicPath
publicPath: './'
:这个配置指定了资源文件的公共路径。在开发环境中,这通常设置为相对路径(如'./'
或''
),以确保资源文件能够正确地从本地服务器加载。在生产环境中,这个路径可能需要设置为 CDN 的 URL 或者部署服务器的路径,以优化资源加载。
好处:
- 环境隔离:通过为不同环境配置不同的入口文件,可以确保每个环境都加载了正确的代码。
- 性能优化:通过外部化常用库,可以减少打包体积并利用浏览器缓存。
- 灵活性:
chainWebpack
提供了一种灵活的方式来定制webpack
配置,而不必完全替换默认配置。 - 可维护性:将配置逻辑放在
vue.config.js
文件中,使得项目的构建和部署配置更加集中和易于维护。
总的来说,这段代码展示了如何根据不同的构建环境定制 webpack
配置,以优化应用的性能和打包过程。