webpack原理篇(六十):使用 loader-runner 高效进行 loader 的调试

简介: webpack原理篇(六十):使用 loader-runner 高效进行 loader 的调试

说明

玩转 webpack 学习笔记



loader-runner 介绍


定义:loader-runner 允许你在不安装 webpack 的情况下运行 loaders

作用:


  • 作为 webpack 的依赖,webpack 中使用它执行 loader
  • 进行 loader 的开发和调试




loader-runner 的使用

https://github.com/webpack/loader-runner#readme

import { runLoaders } from "loader-runner";
runLoaders({
  resource: "/abs/path/to/file.txt?query",
  // String: 资源的绝对路径(可选地包括查询字符串)
  loaders: ["/abs/path/to/loader.js?query"],
  // String[]: 加载器的绝对路径(可选地包括查询字符串)
  // {loader, options}[]: 带有选项对象的加载程序的绝对路径
  context: { minimize: true },
  // 用作基本上下文的附加加载程序上下文
  processResource: (loaderContext, resourcePath, callback) => { ... },
  // 可选:处理资源的函数
  // 必须有签名 function(context, path, function(err, buffer))
  // 默认使用 readResource 并且资源被添加一个 fileDependency
  readResource: fs.readFile.bind(fs)
  // 可选:读取资源的函数
  // 仅在未提供 'processResource' 时使用
  // 必须有签名 function(path, function(err, buffer))
  // 默认使用 fs.readFile
}, function(err, result) {
  // err: Error?
  // result.result: Buffer | String
  // The result
  // only available when no error occured
  // result.resourceBuffer: Buffer
  // The raw resource as Buffer (useful for SourceMaps)
  // only available when no error occured
  // result.cacheable: Bool
  // Is the result cacheable or do it require reexecution?
  // result.fileDependencies: String[]
  // An array of paths (existing files) on which the result depends on
  // result.missingDependencies: String[]
  // An array of paths (not existing files) on which the result depends on
  // result.contextDependencies: String[]
  // An array of paths (directories) on which the result depends on
})



开发一个 raw-loader


将文件转换为string

src/raw-loader.js:

module.exports = function(source) {
    const json = JSON.stringify(source)
    .replace(/\u2028/g, '\\u2028' ) // 为了安全起见, ES6模板字符串的问题
    .replace(/\u2029/g, '\\u2029');
    return `export default ${json}`;
};


使用 loader-runner 调试 loader

run-loader.js:

const fs = require("fs");
const path = require("path");
const { runLoaders } = require("loader-runner");
runLoaders(
    {
        resource: "./demo.txt",
        loaders: [path.resolve(__dirname, "./loaders/rawloader")], readResource: fs.readFile.bind(fs),
    },
    (err, result) => (err ? console.error(err) : console.log(result))
);


运行查看结果:

node run-loader.js

829c0d9f0cae44d2ba797c8ada2d8ad2.png




实战


1、初始化项目并且安装依赖

npm init -y
npm i loader-runner -S

fbf2876e6bac45e287cf5f3df0c189b0.png

2、添加文本跟 raw-loader.js

6f81f6d683024f159f4905f30bd14e74.png


3、编写 run-loader.js

const fs = require("fs");
const path = require("path");
const { runLoaders } = require("loader-runner");
runLoaders(
    {
        resource: "./src/kaimo.txt",
        loaders: [
            path.resolve(__dirname, "./src/raw-loader.js")
        ],
        context: {
            minimize: true
        },
        readResource: fs.readFile.bind(fs),
    },
    (err, result) => {
        err ? console.error(err) : console.log(result)
    }
);


4、执行

执行 node run-loader.js


1b2bca62be714271b409d9a73e77c7a9.png


如果我们要替换文本里的 666,改成 313

module.exports = function(source) {
    const json = JSON.stringify(source)
    .replace('666', '313')
    .replace(/\u2028/g, '\\u2028' ) // 为了安全起见, ES6模板字符串的问题
    .replace(/\u2029/g, '\\u2029');
    return `export default ${json}`;
};


c91f99d8e6b74b3c8153bda2786e3118.png


目录
相关文章
|
1天前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
56 0
|
1天前
|
存储 前端开发 JavaScript
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
55 0
|
1天前
|
API 开发工具 开发者
webpack热更新原理
Webpack的Hot Module Replacement(HMR)提升开发效率,无需刷新页面即可更新模块。开启HMR需在配置中设`devServer.hot: true`。Webpack构建时插入HMR Runtime,通过WebSocket监听并处理文件变化。当模块改变,Webpack发送更新到浏览器,HMR Runtime找到对应模块进行热替换,保持应用状态。开发者可利用`module.hot` API处理热替换逻辑。
|
1天前
|
JSON 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(上)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
59 0
|
1天前
|
缓存 前端开发 算法
Webpack 进阶:深入理解其工作原理与优化策略
Webpack 进阶:深入理解其工作原理与优化策略
53 2
|
1天前
|
前端开发 JavaScript
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
|
1天前
|
JSON 前端开发 JavaScript
webpack 核心武器:loader 和 plugin 的使用指南(上)
webpack 核心武器:loader 和 plugin 的使用指南(上)
webpack 核心武器:loader 和 plugin 的使用指南(上)
|
1天前
|
XML JSON 前端开发
说说webpack中常见的loader?解决了什么问题?
在Webpack中,Loader是用于处理各种文件类型的模块加载器,它们用于对文件进行转换、处理和加载。常见的Loader解决了以下问题:
23 0
|
1天前
|
Web App开发 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(下)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
29 0
|
1天前
|
存储 前端开发 JavaScript
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)(下)
Webpack【Webpack中模式(Mode)、Webpack中使用DevServer、Webpack中devtool增强调试过程】(二)-全面详解(学习总结---从入门到深化)
20 0