亮神知识库 亮神知识库
首页
  • 手写代码

    • 手写代码系列
  • 基础知识

    • 基础
    • JS底层
    • CSS
  • 原理
  • 浏览器
  • HTTP
  • 网络安全
  • babel
  • webpack基础
  • webpack进阶
  • Vite
  • TypeScript
  • Vue2
  • Vue3
  • Node基础

    • glob
    • 模块化机制
    • 事件循环
    • KOA2框架原理
    • Node子进程
    • cluster原理(了解)
  • 教育行业2021

    • B端
    • C端
    • 工具
  • 游戏行业2025
  • 刷题
  • 杂(待整理)
  • 学习
  • 面试
  • 实用技巧
  • 心情杂货
  • 年度总结
  • 友情链接
关于
  • 分类
  • 标签
  • 归档
  • 收藏
GitHub (opens new window)

亮神

前程明亮,未来可期
首页
  • 手写代码

    • 手写代码系列
  • 基础知识

    • 基础
    • JS底层
    • CSS
  • 原理
  • 浏览器
  • HTTP
  • 网络安全
  • babel
  • webpack基础
  • webpack进阶
  • Vite
  • TypeScript
  • Vue2
  • Vue3
  • Node基础

    • glob
    • 模块化机制
    • 事件循环
    • KOA2框架原理
    • Node子进程
    • cluster原理(了解)
  • 教育行业2021

    • B端
    • C端
    • 工具
  • 游戏行业2025
  • 刷题
  • 杂(待整理)
  • 学习
  • 面试
  • 实用技巧
  • 心情杂货
  • 年度总结
  • 友情链接
关于
  • 分类
  • 标签
  • 归档
  • 收藏
GitHub (opens new window)
  • babel

  • webpack基础

  • webpack深入

    • 源码深入
    • 手写简易webpack
    • webpack-loader机制
      • loader介绍
      • 面试
    • webpack插件机制
    • webpack模块加载原理
    • 懒加载(未完全理解)
    • 热更新原理
    • webpack proxy原理
  • Vite

  • TypeScript

  • 打包工具
  • webpack深入
0zcl
2021-12-18
目录

webpack-loader机制

# loader介绍

默认情况下,在遇到import或者require加载模块的时候,webpack只支持对js 和 json 文件打包(真的吗??)

像css、sass、png等这些类型的文件的时候,webpack则无能为力,这时候就需要配置对应的loader进行文件内容的解析

loader支持链式调用,链中的每个loader会处理上一个loader处理过的资源,最终变为js代码。

// 配置。执行顺序:sass-loader、css-loader、style-loader
module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          { loader: 'style-loader' },
          {
            loader: 'css-loader',
            options: {
              modules: true
            }
          },
          { loader: 'sass-loader' }
        ]
      }
    ]
  }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Loader的上下文,Loader函数可接收三个参数content(模块内容), map, meta. 函数中的上下文this有很多运行时的信息,eg: <code>this.emitFile</code>、<code>this.async</code>, 具体见Loader上下文 (opens new window)

// 同步Loader
module.exports = function (content, map, meta) {
  return someSyncOperation(content);
};

// 异步Loader
module.exports = function (content, map, meta) {
  var callback = this.async(); // 标识该 loader 是异步处理的
  someAsyncOperation(content, function (err, result) {
    if (err) return callback(err);
    callback(null, result, map, meta);
  });
};
1
2
3
4
5
6
7
8
9
10
11
12
13

Pitching Loader (opens new window), Pitching: 投球

# 面试

问:是否写过 Loader?简单描述一下编写 Loader 的思路?

  1. Loader通过链式操作,执行顺序从后往前
  2. 每个Loader最好只做一件事,“单一职责”,拿到源文件,输出处理后的源文件
  3. loader函数的this上下文由webpack提供,包含很多运行时的信息与API接口
编辑 (opens new window)
上次更新: 2025/07/17, 07:17:44
手写简易webpack
webpack插件机制

← 手写简易webpack webpack插件机制→

最近更新
01
2024年
07-20
02
2023年
07-20
03
2022年
07-20
更多文章>
Theme by Vdoing | Copyright © 2025-2025 亮神 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式