从0实现一个webpack loader

栏目: JavaScript · 发布时间: 4年前

内容简介:在实现之前我们先来了解以下webpack的打包流程:可以看出loader在webpack打包的过程中起到了至关重要的作用。由于webpack是基于Node的所以webpack只能识别

在实现之前我们先来了解以下webpack的打包流程:

  • 初始化配置对象,创建compiler对象
  • 实例化插件,调用插件的apply方法,挂载插件的监听
  • 从入口文件执行编译,按照文件类型调用相应的loader,在合适的时间调用plugin执行,并查找各个模块的依赖
  • 将编译后的代码组装成一个个代码块(chunk),并安依赖和配置确定输出内容
  • 根据output把文件输出到对象的目录下

可以看出loader在webpack打包的过程中起到了至关重要的作用。

loader到底做了什么?

由于webpack是基于Node的所以webpack只能识别 .js 文件,所以针对其他的文件就需要转译,这时候就需要用到我们的loader了。

loader是文件加载器,能够加载资源文件,并对这些文件进行特定的处理,然后打包的指定文件中,简单来说就是将webpack传入的字符串做出特定的处理修改。

比如: A.less -> A.css

loader特点

  • loader的执行顺序和代码书写的顺序是相反的,即:最后一个loader最先执行,第一个loader最后执行
  • 第一个执行的loader会接收源文件做为参数,下一次执行的loader会接收前一个loader执行的返回值做为参数

loader编写原则

  • 单一原则: 每个 Loader 只做一件事;
  • 链式调用: Webpack 会按顺序链式调用每个 Loader;
  • 统一原则: 遵循 Webpack 制定的设计规则和结构,输入与输出均为字符串,各个 Loader 完全独立,即插即用;

实现loader

需求:将 .txt 后缀的文件中的内容倒叙并大写。

首先创建 webpack-loader 文件夹。输入 npm init -y 初始化。安装webapck和webpack-cli: npm i webpack webpack-cli -D

package.json 文件下添加脚本

...
"scripts": {
    "build": "webpack",
    ...
}
...
复制代码

创建test.txt文件夹输入内容: hello world

创建loaders文件夹新建两个loader: 编写两个loader是为了符合单一职责原则。

// loader1,倒叙
module.exports = function (src) {
 src = src.split('').reverse().join('')
 return src;
}
// loader2,大写
module.exports = function (src) {
   src = src.charAt(0).toUpperCase() + src.slice(1)
  // 这里为什么要这么写?因为直接返回转换后的字符串会报语法错误,
  // 这么写import后转换成可以使用的字符串
  return `module.exports = '${src}'`
 }
复制代码

添加 webpack.config.js 配置文件

const path = require('path')

module.exports = {
  entry: {
    app: './test.txt'
  },
  module: {
    rules: [
      {
        test: /\.txt$/,
        use: [
          './loaders/myloader2.js','./loaders/myloader1.js'
        ]
      }
    ]
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].txt'
  }
}
复制代码

文件结构

从0实现一个webpack loader

最后:输入命令行 npm run build 打包成功,并生成了 dist/app.txt 文件。

从0实现一个webpack loader
从0实现一个webpack loader

打开 app.txt 文件在最后找到了转译后的字符:

从0实现一个webpack loader

参考: juejin.im/post/5cb01f…


以上所述就是小编给大家介绍的《从0实现一个webpack loader》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法分析

数据结构与算法分析

(美)(C.A.谢弗)Clifford A.Shaffer / 电子工业出版社 / 1998-8 / 35.00元

本书综合“数据结构与算法”的知识梳理、习题解答及上机辅导等于一身;精心挑选了覆盖教学大纲的五百多道题目,并且提供所有题目的参考答案;对于较难的算法和上机题,给出了详细的分析和说明;对于学习的重点和难点、易犯的错误、题目的难易和重要性,以及国内教材的差异等都给出了必要的说明。 本书可给使用各种教材讲授和学习“数据结构与算法”(或者“数据结构”)的师生参考,是系统复习该课程和准备应考计算......一起来看看 《数据结构与算法分析》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具