博客
关于我
webpack loader配置全流程详解
阅读量:794 次
发布时间:2023-02-11

本文共 2313 字,大约阅读时间需要 7 分钟。

配置语法解析

Webpack的模块配置是其核心功能之一,主要涉及模块属性的设置和规则集的定义。以下将从模块属性和规则集两个方面详细阐述配置的具体语法和实现原理。

模块属性

Webpack模块的配置通常通过module.exportsmodule.exports = {}的形式进行定义。核心配置项包括noParserules,以下是常见的配置示例:

module.exports = {
// ...其他配置
module: {
noParse: /jquery/,
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: './loader1.js?num=1', options: { myoptions: false } },
'./loader2.js?num=2'
]
},
{
test: /\.js$/,
include: /src/,
loader: './loader1.js!./loader2.js'
}
]
}
}

从上述配置可以看出,module对象包含了noParserules两个属性。noParse用于指定需要保留的文件类型或路径,Webpack将跳过对这些文件的转化但仍会打包输出到DIST目录。rules则是核心配置,用于定义文件匹配规则和对应的加载器。

Webpack的模块属性声明

根据Webpack的打字稿声明,ModuleOptions接口定义了模块属性的各种可能性,具体包括以下属性及其类型:

export interface ModuleOptions {
// 一般下面这两个
noParse?: RegExp[] | RegExp | Function | string[] | string;
rules?: RuleSetRules;
// 这些...已被废弃,即将被删除,不用看
defaultRules?: RuleSetRules;
exprContextCritical?: boolean;
exprContextRecursive?: boolean;
exprContextRegExp?: boolean | RegExp;
exprContextRequest?: string;
strictExportPresence?: boolean;
strictThisContextOnImports?: boolean;
unknownContextCritical?: boolean;
unknownContextRecursive?: boolean;
unknownContextRegExp?: boolean | RegExp;
unknownContextRequest?: string;
unsafeCache?: boolean | Function;
wrappedContextCritical?: boolean;
wrappedContextRecursive?: boolean;
wrappedContextRegExp?: RegExp;
}

从中可以看出,noParse支持多种类型,包括正则表达式、函数、字符串等,rules属性则定义了规则集的具体规则。需要注意的是,rules属性的类型是RuleSetRules,而RuleSetConditionsRecursive则是RuleSetCondition[]类型,表示一个数组。

规则集的规范化

在实际应用中,一个规则集可能包含多种不同的规则,每个规则对应不同的文件类型和加载方式。然而,由于规则的属性类型多样,底层需要对这些规则进行规范化处理,确保规则的类型一致性。这一过程通常由RuleSet.js模块负责。

规范化后的规则对象可能会呈现以下形式:

// 规则对象规范化后的形状应该是:
{
resource: function(),
resourceQuery: function(),
compiler: function(),
issuer: function(),
use: [
{
loader: string
}
]
}

规范化过程中,底层会自动处理规则的属性类型收敛,减少手动判断typeof等操作,从而提高代码的可维护性和性能。

总结

通过以上配置示例和理论分析,可以清晰地了解Webpack模块配置的基本语法和工作原理。从module.exportsrules的配置,都是为了实现对文件的智能转化和打包,确保在开发和生产环境下都能高效运行。理解这些配置项的含义和类型,有助于更好地优化Webpack的打包流程,提升开发效率。

转载地址:http://htbfk.baihongyu.com/

你可能感兴趣的文章
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
Mysql 整形列的字节与存储范围
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>