前端工程化之webpack

本文详细探讨了Webpack中的Loader和Plugin的开发原理和应用。Loader主要用于转换非JS文件,遵循“单一职责”原则,确保转换后的内容符合JS格式。编写Loader时,需确保返回值为JS字符串,并通过`this.callback`或直接返回处理后的内容。Plugin则负责功能扩展,通过监听Webpack生命周期事件来执行任务。Plugin以函数或包含`apply`方法的对象形式存在,需绑定到特定的事件钩子。理解Webpack的Loader和Plugin机制,能有效提升前端工程化的实践能力。
摘要由CSDN通过智能技术生成

mini-css-extract-plugin: 分离样式文件,CSS 提取为独立文件,支持按需加载

clean-webpack-plugin: 目录清理

speed-measure-webpack-plugin: 可以看到每个 Loader 和 Plugin 执行耗时 (整个打包耗时、每个 Plugin 和 Loader 耗时)

webpack-bundle-analyzer: 可视化 Webpack 输出文件的体积 (业务组件、依赖第三方模块)

**5、**是否写过Loader?简单描述一下编写loader的思路?


从上面的打包代码我们其实可以知道,Webpack最后打包出来的成果是一份Javascript代码,实际上在Webpack内部默认也只能够处理JS模块代码,在打包过程中,会默认把所有遇到的文件都当作 JavaScript代码进行解析,因此当项目存在非JS类型文件时,我们需要先对其进行必要的转换,才能继续执行打包任务,这也是Loader机制存在的意义。

Loader的配置使用我们应该已经非常的熟悉:

// webpack.config.js

module.exports = {

// …other config

module: {

rules: [

{

test: /^your-regExp$/,

use: [{ loader: “loader-name-A” }, { loader: “loader-name-B” }],

},

],

},

};

/ webpack

通过配置可以看出,针对每个文件类型,loader是支持以数组的形式配置多个的,因此当Webpack在转换该文件类型的时候,会按顺序链式调用每一个loader,前一个loader返回的内容会作为下一个loader的入参。因此loader的开发需要遵循一些规范,比如返回值必须是标准的JS代码字符串,以保证下一个loader能够正常工作,同时在开发上需要严格遵循“单一职责”,只关心loader的输出以及对应的输出。

loader函数中的this上下文由webpack提供,可以通过this对象提供的相关属性,获取当前loader需要的各种信息数据,事实上,这个this指向了一个叫loaderContext的loader-runner特有对象。有兴趣的小伙伴可以自行阅读源码。

module.expor

module.exports = function (source) {

const content = doSomeThing2JsString(source);

// 如果 loader 配置了 options 对象,那么this.query将指向 options

const options = this.query;

// 可以用作解析其他模块路径的上下文

console.log(“this.context”);

/*

* * this.callback 参数:

* * error:Error | null,当 loader 出错时向外抛出一个 error

* * content:String | Buffer,经过 loader 编译后需要导出的内容

* * sourceMap:为方便调试生成的编译后内容的 source map

* * ast:本次编译生

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值