首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第5章 样式处理
5.1 分离样式文件
5.1.1 extract-text-webpack-plugin
5.1.2 多样式文件的处理
5.1.3 mini-css-extract-plugin
5.2 样式预处理
5.2.1 Sass与SCSS
5.2.2 Less
5.3 PostCSS
5.3.1 PostCSS与Webpack
5.3.2 自动前缀
5.3.3 stylelint
5.3.4 CSSNext
5.4 CSS Modules
第6章 代码分片
6.1 通过入口划分代码
6.2 CommonsChunkPlugin
6.2.1 提取vendor
6.2.2 设置提取范围
6.2.3 设置提取规则
6.2.4 hash与长效缓存
6.2.5 CommonsChunkPlugin的不足
6.3 optimization.SplitChunks
6.3.1 从命令式到声明式
6.3.2 默认的异步提取
6.3.3 配置
6.4 资源异步加载
6.4.1 import()
6.4.2 异步chunk的配置
第7章 生产环境配置
7.1 环境配置的封装
7.2 开启production模式
7.3 环境变量
7.4 source-map
7.4.1 source-map原理
7.4.2 source-map配置
7.4.3 source-map安全
7.5 资源压缩
7.5.1 压缩JavaScript
7.5.2 压缩CSS
7.6 缓存
7.6.1 资源hash
7.6.2 输出动态HTML
7.6.3 使chunk id更稳定
7.7 bundle体积监控和分析
第8章 打包优化
8.1 HappyPack
8.1.1 工作原理
8.1.2 单个loader的优化
8.1.3 多个loader的优化
8.2 缩小打包作用域
8.2.1 exclude和include
8.2.2 noParse
8.2.3 IgnorePlugin
8.2.4 缓存
8.3 动态链接库与DllPlugin
8.3.1 vendor配置
8.3.2 vendor打包
8.3.3 链接到业务代码
8.3.4 潜在问题
8.4 去除死代码
8.4.1 ES6 Module
8.4.2 使用Webpack进行依赖关系构建
8.4.3 使用压缩工具去除死代码
当前位置:
首页>>
技术小册>>
Webpack实战:入门、进阶与调优(中)
小册名称:Webpack实战:入门、进阶与调优(中)
### 8.2.1 exclude和include:Webpack模块解析的精细控制 在Webpack的构建流程中,`module.rules` 配置项扮演着至关重要的角色,它定义了如何处理项目中的不同模块(文件)。在这些规则中,`exclude` 和 `include` 选项是两个非常实用的工具,它们允许开发者对Webpack的模块解析过程进行精细控制,从而提高构建效率,减少不必要的文件处理,以及避免潜在的构建错误。本章节将深入探讨`exclude`和`include`的工作原理、使用场景、最佳实践,并通过实例演示如何在Webpack配置中有效利用这两个选项。 #### 一、理解`exclude`和`include` 在Webpack中,每个`module.rule`都可以指定一个或多个`test`、`use`、`include`、`exclude`等选项。其中,`test`定义了哪些文件应该被当前规则处理,而`use`则指定了处理这些文件所使用的loader。相比之下,`include`和`exclude`则提供了额外的灵活性,允许开发者进一步限制规则的应用范围。 - **`include`**:明确指定哪些目录下的文件应该被当前规则处理。这有助于减少Webpack的搜索范围,提高构建速度。 - **`exclude`**:明确指定哪些目录下的文件不应该被当前规则处理。这通常用于排除掉一些大型库或不需要处理的文件,以避免无谓的loader执行和可能的错误。 值得注意的是,`include`和`exclude`都接受字符串(表示单个路径)、正则表达式或字符串数组作为值。此外,它们可以单独使用,也可以组合使用,但通常建议优先使用`include`来缩小处理范围,因为这样可以更直接地优化Webpack的性能。 #### 二、使用场景 ##### 1. 排除大型库或第三方代码 在项目中,我们经常会引入一些大型的第三方库(如jQuery、Lodash等),这些库通常已经过优化,不需要再通过Webpack的loader(如Babel)进行处理。通过在这些库的路径上设置`exclude`,我们可以避免Webpack对这些库进行不必要的转换,从而提高构建速度。 ```javascript module: { rules: [ { test: /\.js$/, exclude: /node_modules\/(?!some-specific-library)\//, // 排除除了some-specific-library之外的所有node_modules中的文件 use: 'babel-loader', }, ], }, ``` ##### 2. 专注于特定目录或文件 如果你的项目结构庞大,而只有部分目录或文件需要特定的loader处理,那么使用`include`来指定这些目录或文件会是一个好主意。这不仅可以减少Webpack的工作量,还能让配置文件更加清晰。 ```javascript module: { rules: [ { test: /\.scss$/, include: path.resolve(__dirname, 'src/components'), // 仅处理src/components目录下的scss文件 use: ['style-loader', 'css-loader', 'sass-loader'], }, ], }, ``` ##### 3. 排除已知不需要处理的文件 有时,项目中可能存在一些特殊文件(如测试文件、示例文件等),这些文件虽然符合`test`的正则表达式,但实际上并不需要被Webpack处理。通过在这些文件的路径上设置`exclude`,可以避免Webpack的误操作。 ```javascript module: { rules: [ { test: /\.js$/, exclude: /__tests__\//, // 排除所有__tests__目录下的js文件 use: 'babel-loader', }, ], }, ``` #### 三、最佳实践 1. **优先使用`include`**:当可以明确指定需要处理的文件范围时,优先使用`include`而不是依赖`exclude`来排除不需要的文件。这有助于Webpack更快地定位到需要处理的文件。 2. **谨慎使用正则表达式**:虽然正则表达式提供了强大的匹配能力,但复杂的正则表达式也可能导致Webpack解析速度变慢,甚至引入难以察觉的错误。尽量使用简单明了的正则表达式,或者直接使用路径字符串。 3. **结合缓存策略**:在利用`include`和`exclude`优化构建过程的同时,不要忘记结合Webpack的缓存策略(如`cache-loader`或Webpack自身的缓存机制),以进一步提升构建效率。 4. **定期检查配置**:随着项目的发展,文件结构和依赖可能会发生变化。定期检查Webpack配置中的`include`和`exclude`设置,确保它们仍然符合项目的实际需求。 5. **文档化配置**:在团队项目中,良好的文档是避免配置误解和错误的关键。确保你的Webpack配置(包括`include`和`exclude`)都有详细的注释和文档说明。 #### 四、实例演示 假设我们有一个React项目,该项目使用了Babel来转换JSX和ES6+代码,同时使用了Sass来编写样式。为了优化Webpack的构建过程,我们可以这样配置`module.rules`: ```javascript const path = require('path'); module.exports = { // ... module: { rules: [ // 处理JSX和ES6+ { test: /\.js$|\.jsx$/, exclude: /node_modules\//, // 排除node_modules中的所有文件 include: path.resolve(__dirname, 'src'), // 仅处理src目录下的文件 use: { loader: 'babel-loader', options: { // Babel配置 }, }, }, // 处理Sass { test: /\.scss$/, include: path.resolve(__dirname, 'src/styles'), // 仅处理src/styles目录下的scss文件 use: ['style-loader', 'css-loader', 'sass-loader'], }, // 其他规则... ], }, // ... }; ``` 通过上述配置,Webpack将只处理`src`目录下的JS/JSX文件和`src/styles`目录下的Sass文件,从而避免了不必要的文件处理,提高了构建效率。 #### 结语 `exclude`和`include`是Webpack配置中非常实用的选项,它们为开发者提供了对模块解析过程的精细控制能力。通过合理使用这两个选项,我们可以优化Webpack的构建过程,提高构建速度,减少潜在的错误。希望本章节的内容能够帮助你更好地理解和使用这两个选项,从而在Webpack项目中实现更高效、更可维护的构建流程。
上一篇:
8.2 缩小打包作用域
下一篇:
8.2.2 noParse
该分类下的相关小册推荐:
Webpack零基础入门
Webpack实战:入门、进阶与调优(上)
全解webpack前端开发环境定制
webpack指南
Webpack实战:入门、进阶与调优(下)