File tree Expand file tree Collapse file tree 2 files changed +57
-1
lines changed Expand file tree Collapse file tree 2 files changed +57
-1
lines changed Original file line number Diff line number Diff line change @@ -98,7 +98,7 @@ export default defineConfig({
9898 text : "构建工具" ,
9999 items : [
100100 { text : "Vite" , link : "bundle/vite/initial" } ,
101- { text : "Webpack" , link : "/bundle/webpack/treeShaking " } ,
101+ { text : "Webpack" , link : "/bundle/webpack/webpack " } ,
102102 ] ,
103103 } ,
104104 ] ,
@@ -377,6 +377,10 @@ export default defineConfig({
377377 {
378378 text : "webpack" ,
379379 items : [
380+ {
381+ text : "webpack" ,
382+ link : "/bundle/webpack/webpack" ,
383+ } ,
380384 {
381385 text : "树摇" ,
382386 link : "/bundle/webpack/treeShaking" ,
Original file line number Diff line number Diff line change 1+ ---
2+ layout : doc
3+ outline : deep
4+ ---
5+ ## 流程
6+ * 初始化:读取合并配置信息,加载plugin,实例化compiler
7+ * 编译:从entry出发,针对每个module调用对应的loader去翻译源代码,再找到该module依赖的module,递归的进行编译处理
8+ * 输出:将编译后的module组合成chunk,将chunk转化为文件,输出到文件系统中
9+ ## loader
10+ 一个loader其实就是一个Node.js模块,这个模块需要导出一个函数,接收原内容,返回处理之后的内容。
11+
12+ 由于loader运行在node.js上,所以我们可以调用任意node.js自带的api,或者按照第三方模块进行调用
13+
14+ ``` js
15+ const { validate } = require (' schema-utils' ); // 配置验证工具 [4](@ref)
16+ const loaderUtils = require (' loader-utils' ); // 工具库(Webpack 内置)
17+
18+ // 1. 定义配置的 JSON Schema(用于参数校验)
19+ const schema = {
20+ type: ' object' ,
21+ properties: {
22+ prefix: { type: ' string' }, // 示例参数
23+ debug: { type: ' boolean' }
24+ },
25+ additionalProperties: false // 禁止额外参数
26+ };
27+
28+ // 2. Loader 主体函数
29+ module .exports = function (source ) {
30+ // 异步模式(通过回调返回结果)
31+ const callback = this .async ();
32+
33+ // 3. 获取并验证配置项
34+ const options = loaderUtils .getOptions (this ) || {};
35+ validate (schema, options, { name: ' My Loader' }); // 校验失败时抛出错误 [4](@ref)
36+
37+ // 4. 处理内容(示例:为文本添加前缀)
38+ let result = source;
39+ if (options .prefix ) {
40+ result = options .prefix + result;
41+ }
42+
43+ // 5. 返回结果(支持多种格式)
44+ callback (null , result);
45+ };
46+
47+ // 6. 声明是否处理二进制文件(默认处理文本)
48+ module .exports .raw = false ; // 若需处理图片等二进制数据,设为 true [6](@ref)
49+ ```
50+ ## plugin
51+ * compiler: Webpack 的全局单例对象,代表整个构建环境
52+ * compilation:代表一次新的编译
You can’t perform that action at this time.
0 commit comments