本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2021-06-25
调整 webpack 配置最简单的方式就是在 vue.config.js
中的 configureWebpack 返回一个函数或者返回一个将会被合并的对象。
// vue.config.js
module.exports = {
configureWebpack: {
plugins: [
new MyAwesomeWebpackPlugin()
]
}
}
// 需要注意的是 output.path、 output.publicPath 不能配置在 configWebpack 中
// 而是应该直接配置在 `vue.config.js` 的对应选项 outputDir 、 publicPath 中
// 因为这些值在多个地方被使用,为了确保正常工作,应该统一起来
Vue CLI 内部的 webpack 配置还有一个 chainWebpack 是通过 webpack-chain 维护的。这个库提供了一个 webpack 原始配置的上层抽象,使其可以定义具名的 loader 规则和具名插件,并有机会在后期进入这些规则并对它们的选项进行修改。它允许我们更细粒度的控制其内部配置.
示例:
// vue.config.js
module.exports = {
chainWebpack: config => {
// 修改 Loader 选项
config.module
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
// 修改它的选项...
return options
});
// 添加一个新的 Loader
config.module
.rule('graphql')
.test(/\.graphql$/)
.use('graphql-tag/loader')
.loader('graphql-tag/loader')
.end()
.use('other-loader') // 添加
.loader('other-loader')
.end();
// 替换一个规则里的 Loader
const svgRule = config.module.rule('svg')
// 清除已有的所有 loader。
// 如果你不这样做,接下来的 loader 会附加在该规则现有的 loader 之后。
svgRule.uses.clear()
// 添加要替换的 loader
svgRule
.use('vue-svg-loader')
.loader('vue-svg-loader');
// 修改插件选项
// 将 index.html 默认的路径从 /Users/username/proj/public/index.html 改为 /Users/username/proj/app/templates/index.html
config
.plugin('html')
.tap(args => {
args[0].template = '/Users/username/proj/app/templates/index.html'
return args;
})
}
}
// 这里只是举例,对于 CSS 相关 loader 来说,推荐使用上面提到的 css.loaderOptions
因为 @vue/cli-service 对 webpack 配置进行了抽象,所以理解配置中包含的东西会比较困难,尤其是当你打算自行对其调整的时候。vue-cli-service
暴露了 inspect
命令用于审查解析好的 webpack 配置。
那个全局的 vue 命令行同样提供了 inspect 命令,这个命令只是简单的把 vue-cli-service inspect
代理到了你的项目中。
该命令会将解析出来的 webpack 配置、包括链式访问规则和插件的提示打印到 stdout。
vue inspect > output.js
# 只审查第一条规则
vue inspect module.rules.0
# 或者指向一个规则或插件的名字
vue inspect --rule vue
vue inspect --plugin html
# 列出所有规则和插件的名字
vue inspect --rules
vue inspect --plugins # 会有对应注释来提示如何在vue.config.js来修改对应插件
有些外部工具可能需要通过一个文件访问解析好的 webpack 配置,比如那些需要提供 webpack 配置路径的 IDE 或 CLI。在这种情况下你可以使用如下路径 <projectRoot>/node_modules/@vue/cli-service/webpack.config.js
,该文件会动态解析并输出 vue-cli-service 命令中使用的相同的 webpack 配置,包括那些来自插件甚至是你自定义的配置。
vue.config.js
是一个可选的配置文件,如果项目的 (和 package.json
同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service
自动加载。你也可以使用 package.json
中的 vue
字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。
部署应用包时的基本 URL。例如 https://www.my-app.com/my-app/
,则设置 publicPath 为 /my-app/
。
这个值也可以被设置为空字符串 (''
) 或是相对路径 ('./'
),这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径。
默认 'dist'
,当运行 vue-cli-service build 时生成的生产环境构建文件的目录。注意目标目录在构建之前会被清除 (构建时传入 –no-clean 可关闭该行为)。
module.exports = {
pages: {
index: {
// page 的入口
entry: 'src/index/main.js',
// 模板来源
template: 'public/index.html',
// 在 dist/index.html 的输出
filename: 'index.html',
// 当使用 title 选项时,
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Index Page',
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
},
// 当使用只有入口的字符串格式时,
// 模板会被推导为 `public/subpage.html`
// 并且如果找不到的话,就回退到 `public/index.html`。
// 输出文件名会被推导为 `subpage.html`。
subpage: 'src/subpage/main.js'
}
// 每个“page”应该有一个对应的 JavaScript 入口文件。其值应该是一个对象,对象的 key 是入口的名字,比如这里的 index subpage
}
更多配置请查看配置参考