在 webpack 配置中,除了基本的入口、出口和模块规则之外,还有一些高级配置选项可以帮助你更精细地控制构建过程。以下是一些常见的配置项及其用途:
1. context
context: path.resolve(__dirname, "app")
-
作用:设置 webpack 的上下文目录。入口和 loaders 的相对路径会以
context的配置作为基准路径,这样,你的配置会独立于 CWD(当前工作目录)。 -
示例:如果你的项目结构如下:
my-project/ ├── app/ │ ├── src/ │ │ └── index.js ├── dist/ └── webpack.config.js你可以设置
context为app,这样入口文件可以写成./src/index.js,而不是./app/src/index.js。
2. output
library
library: "abc"
- 作用:将打包后的结果暴露给一个全局变量
abc。 - 示例:如果
library: "MyLib",那么打包后的代码会在全局作用域下创建一个名为MyLib的变量。
libraryTarget
libraryTarget: "var"
- 作用:控制如何暴露入口包的导出结果。
- 可用值:
var:默认值,暴露给一个普通变量。window:暴露给window对象的一个属性。this:暴露给this的一个属性。global:暴露给global的一个属性。commonjs:暴露给exports的一个属性。- 更多:官方文档
3. target
target: "web" // 默认值
- 作用:设置打包结果最终要运行的环境。
- 常用值:
web:打包后的代码运行在 Web 环境中。node:打包后的代码运行在 Node.js 环境中。- 更多:官方文档
4. module.noParse
noParse: /jquery/
- 作用:不解析正则表达式匹配的模块,通常用于忽略那些大型的单模块库,以提高构建性能。
- 示例:如果你的项目中使用了 jQuery,可以设置
noParse: /jquery/,这样 webpack 不会解析 jQuery 的源代码,从而加快构建速度。
5. resolve
resolve 相关配置主要用于控制模块解析过程。
modules
modules: ["node_modules"] // 默认值
- 作用:当解析模块时,如果遇到导入语句
require("test"),webpack 会从指定的目录中寻找依赖的模块。 - 示例:默认情况下,webpack 会从当前目录下的
node_modules目录和上级目录的node_modules目录中查找模块。
extensions
extensions: [".js", ".json"] // 默认值
- 作用:当解析模块时,遇到无具体后缀的导入语句,例如
require("test"),会依次测试它的后缀名。 - 示例:如果
extensions: [".js", ".json"],那么require("test")会依次尝试test.js和test.json。
alias
alias: {
"@": path.resolve(__dirname, 'src'),
"_": __dirname
}
-
作用:设置模块的别名,使导入语句更加简洁。
-
示例:如果你的项目结构如下:
my-project/ ├── src/ │ └── components/ │ └── App.js └── webpack.config.js你可以设置
alias: { "@": path.resolve(__dirname, 'src') },这样import App from '@/components/App'会解析为import App from './src/components/App'。
6. externals
externals: {
jquery: "$",
lodash: "_"
}
-
作用:从最终的 bundle 中排除掉配置的模块,适用于一些第三方库来自外部 CDN 的情况。
-
示例:如果你的入口模块是:
// index.js require("jquery"); require("lodash");生成的 bundle 会包含 jQuery 和 lodash 的源代码。但有了
externals配置后,生成的 bundle 会变成:(function(){ ... })({ "./src/index.js": function(module, exports, __webpack_require__){ __webpack_require__("jquery"); __webpack_require__("lodash"); }, "jquery": function(module, exports){ module.exports = $; }, "lodash": function(module, exports){ module.exports = _; }, });这样,你可以在页面中使用 CDN 引入的 jQuery 和 lodash,同时减小 bundle 的体积。
7. stats
stats: "errors-only"
- 作用:控制构建过程中控制台的输出内容。
- 可用值:
none:不输出任何内容。errors-only:仅输出错误信息。minimal:输出最少的信息。normal:默认值,输出正常的信息。verbose:输出详细的信息。- 更多:官方文档
总结
通过本课程,你已经了解了 webpack 配置中的一些高级选项,这些配置可以帮助你更精细地控制构建过程,优化构建性能,减少 bundle 体积,并提高开发效率。