美文网首页
自己怎么编写一个webpack loader/Plugin?

自己怎么编写一个webpack loader/Plugin?

作者: __Nancy | 来源:发表于2020-05-13 11:30 被阅读0次

    1. Loader

    Loader 支持链式调用,所以开发上需要严格遵循“单一职责”,每个 Loader 只负责自己需要负责的事情。
    Loader的API 可以去官网查阅

    • Loader 运行在 Node.js 中,我们可以调用任意 Node.js 自带的 API 或者安装第三方模块进行调用
    • Webpack 传给 Loader 的原内容都是 UTF-8 格式编码的字符串,当某些场景下 Loader 处理二进制文件时,需要通过 exports.raw = true 告诉 Webpack 该 Loader 是否需要二进制数据
    • 尽可能的异步化 Loader,如果计算量很小,同步也可以
    • Loader 是无状态的,我们不应该在 Loader 中保留状态
    • 使用 loader-utils 和 schema-utils 为我们提供的实用工具
    • 加载本地 Loader 方法: Npm linkResolveLoader

    2.Plugin

    webpack在运行的生命周期中会广播出许多事件,Plugin 可以监听这些事件,在特定的阶段钩入想要添加的自定义功能。Webpack 的 Tapable 事件流机制保证了插件的有序性,使得整个系统扩展性良好。

    Plugin的API 可以去官网查阅

    1. compiler 暴露了和 Webpack 整个生命周期相关的钩子
    2. compilation 暴露了与模块和依赖有关的粒度更小的事件钩子
    3. 插件需要在其原型上绑定apply方法,才能访问 compiler 实例
    4. 传给每个插件的 compiler 和 compilation对象都是同一个引用,若在一个插件中修改了它们身上的属性,会影响后面的插件
    5. 找出合适的事件点去完成想要的功能
    • emit 事件发生时,可以读取到最终输出的资源、代码块、模块及其依赖,并进行修改(emit 事件是修改 Webpack 输出资源的最后时机)
    • watch-run 当依赖的文件发生变化时会触发
    1. 异步的事件需要在插件处理完任务时调用回调函数通知 Webpack 进入下一个流程,不然会卡住

    相关文章

      网友评论

          本文标题:自己怎么编写一个webpack loader/Plugin?

          本文链接:https://www.haomeiwen.com/subject/cwzgnhtx.html