webpack原理篇(五十九):loader 的链式调用与执行顺序

简介: webpack原理篇(五十九):loader 的链式调用与执行顺序

说明

玩转 webpack 学习笔记



一个最简单的 loader 代码结构

定义:loader 只是一个导出为函数的 JavaScript 模块。

module.exports = function(source) {
  return source;
};


多 Loader 时的执行顺序

多个 Loader 串行执行顺序从后到前

module.exports = {
    entry: './src/index.js', output: {
        filename: 'bundle.js', path: path.resolve(__dirname, 'dist')
    },
    module: {
        rules: [
            {
                test: /\.less$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'less-loader'
                ]
            }
        ]
    }
};


函数组合的两种情况


  • Unix 中的 pipline(从左往右)
  • Compose(webpack 采取的是这种:从右往左)
compose = (f, g) => (...args) => f(g(...args));




通过一个例子验证 loader 的执行顺序


a-loader.js:

module.exports = function(source) {
  console.log ('loader a is executed');
  return source;
};


b-loader.js:

module.exports = function(source) {
  console.log ('loader b is executed');
  return source;
};



实战 loader 的顺序


1、新建初始化项目

新建文件夹 loader-order,然后执行初始化命令

npm init -y

8e01d6825fde4d8fafc49ef40a3da5a7.png


2、安装 webpack webpack-cli

npm i webpack webpack-cli -D

c23eee4927ba40d4ae1dd97ff5841004.png


3、添加 webpack.config.js 配置文件

新建 webpack.config.js 添加下面配置:

const path = require('path');
module.exports = {
    entry: './src/index.js',
    output: {
        path: path.join(__dirname, 'dist'),
        filename: 'main.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                use: [
                    path.resolve('./loaders/a-loader.js'),
                    path.resolve('./loaders/b-loader.js')
                ]
            }
        ]
    }
}


4、添加两个 loader 以及 index 文件

结构如下:loader 的代码在上面,这里就不粘贴了

744d33a3fd934688ae587d83c916754d.png



5、添加脚本执行

"build": "webpack"

运行 npm run build,我们就可以知道顺序是从右往左

d5dc4ca16b7e4fb5ae0fe1c39168cce9.png




目录
相关文章
|
21天前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
62 0
|
20天前
|
前端开发 测试技术 开发者
深入理解 Webpack 热更新原理:提升开发效率的关键
深入理解 Webpack 热更新原理:提升开发效率的关键
|
20天前
|
前端开发 JavaScript
Webpack中的Loader和Plugin:理解与使用
Webpack中的Loader和Plugin:理解与使用
|
21天前
|
API 开发工具 开发者
webpack热更新原理
Webpack的Hot Module Replacement(HMR)提升开发效率,无需刷新页面即可更新模块。开启HMR需在配置中设`devServer.hot: true`。Webpack构建时插入HMR Runtime,通过WebSocket监听并处理文件变化。当模块改变,Webpack发送更新到浏览器,HMR Runtime找到对应模块进行热替换,保持应用状态。开发者可利用`module.hot` API处理热替换逻辑。
|
21天前
|
前端开发 JavaScript 编译器
webpack loader实战——手撕8个常用loader
webpack loader实战——手撕8个常用loader
|
21天前
|
缓存 前端开发 算法
Webpack 进阶:深入理解其工作原理与优化策略
Webpack 进阶:深入理解其工作原理与优化策略
59 2
|
21天前
|
前端开发 JavaScript
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
|
21天前
|
JavaScript 前端开发
webpack成长指北第9章---webpack如何对icon字体进行打包
webpack成长指北第9章---webpack如何对icon字体进行打包
44 1
|
21天前
|
前端开发 JavaScript
webpack成长指北第7章---webpack的css\less\scss样式打包
webpack成长指北第7章---webpack的css\less\scss样式打包
46 0