如何写一个webpack plugin?

  • webpack运行图

    webpack运行图
  • 内置钩子
对象钩子
Compilerrun,compile,compilation,make,emit,done
CompilationbuildModule,normalModuleLoader,succeedModule,finishModules,seal,optimize,after-seal
Module FactorybeforeResolver,afterResolver,module,parser
Module
Parserprogram,statement,call,expression
Templatehash,bootstrap,localVars,render
  • apply

是每个插件必备的方法,webpack会在run的时候通过apply注入webpack实例,webpack还提供许多钩子函数,分别对应webpack执行的不同阶段,你可以在apply利用compiler为webpack注册事件

代码

minify-annotation-plugin.js

去除文件中 /.../ 的注释

module.exports = class MinifyAnnotationPlugin {
  constructor(options) {
    this.options = options;
    this.externalModules = {};
  }
  apply(compiler) {
    var reg = /\/(\*)+.*(\*)+\//g; // 注释正则
    compiler.hooks.emit.tap("MinifyAnnotation", compilation => { // 注册emit事件
      // compilation对应所有编译的文件
      Object.keys(compilation.assets).forEach(filename => { 
        let content = compilation.assets[filename].source();
        content = content.replace(reg, ""); // 替换掉注释
        // 返回新的内容
        compilation.assets[filename] = {
          source() {
            return content;
          },
          size() {
            return content.length;
          }
        };
      });
    });
  }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要手一个webpack插件,你可以按照以下步骤进行操作: 1. 首先,了解webpack自身插件的调用流程。你可以参考webpack内部插件的实现方式来理解。其中一个例子是NodeEnvironmentPlugin插件。 2. 创建一个新的插件文件,比如TestPlugin.js,并在文件中定义一个插件类,比如TestPlugin。 3. 在插件类中使用tapable实例的方法,在webpack的emit钩子函数执行时触发我们定义的函数。你可以使用compiler.hooks.emit.tap方法来绑定钩子函数。 4. 在钩子函数内部,使用compiler.outputFileSystem.writeFile方法创建一个自定义的文件,并在文件中入你想要的内容。比如你可以入一句话,如"//我们的第一个webpack插件!"。 5. 在webpack配置文件中引入你的插件,并将它作为一个实例加入到plugins数组中。 以下是一个示例的webpack配置文件,展示了如何引入TestPlugin插件: ``` const path = require('path'); const TestPlugin = require('./TestPlugin'); module.exports = function() { return { mode: 'development', entry: ['./src/app.js'], output: { path: path.join(__dirname, 'out'), filename: 'out.[name].js' }, plugins: [ new TestPlugin() ] }; }; ``` 通过以上步骤,你就可以手一个简单的webpack插件了。这个插件会在webpack输出的文件夹中创建一个自定义的文件,并在文件中入一句话。你可以根据自己的需求,进一步扩展和定制插件的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值