webpack如何编写一个plugin

在某一些具体时刻上做出某一些动作是插件生效的场景

设计模式:数据驱动,发布订阅 代码之间的执行通过事件来驱动的

此插件介绍:整个打包业务结束,在dist目录下生成一个版权文件的功能实现

cnpm init -y

cnpm install webpack webpack-ci --save

src 
    index.js
        console.log('hello world')

webpack.config.js
    const path = require('path')

    module.exports = {
        mode: 'development',
        entry: {
            main: './src/index.js'
        },
        output: {
            path: path.resolve(__dirname, 'dist'),
            filename: '[name].js'
        }
    }

package.json
    scripts: {
        build: webpack
    }

//插件模板
plugins
    copyright-webpack-plugin.js
        class CopyrightWebpackPlugin {
            constructor() {

            }

            apply(compiler) {//参数为webpack的实例

            }
        }

    module.exports = CopyrightWebpackPlugin;


webpack.config.js
    const CopyRightWebpackPlugin = require('./plugins/copyright-webpack-plugin')

    module.exports = {
        plugins: [
            new CopyRightWebpackPlugin()
        ]
    }

将打包后的资源加入到文件夹之前 异步的时刻

plugins
    copyright-webpack-plugin.js
        class CopyrightWebpackPlugin {
            apply(compiler) {//参数为webpack的实例
                compiler.hooks.emit.tapAsync('CopyrightWebpackPlugin', (compilation, cb) => { 
                    debugger;
                    compilation.assets['copyright.txt'] = {
                        source: function() {
                            return 'copyright by dell lee'
                        },
                        size: function() {
                            return 21
                        }
                    };
                    cd();//必须调用 callback
                })
            }
        }

    module.exports = CopyrightWebpackPlugin;
    //compiler.hooks.emit.tapAsync  将打包后的资源加入到文件夹之前,tapAsync  异步的时刻
    //'CopyrightWebpackPlugin'      方法的名称 
    //compilation                   存放跟这次打包有关的内容
    //compilation.assets            存放这次打包内容的位置
    //compilation.assets['copyright.txt']    往compilation.assets添加copyright.txt这个文件
    //source    往里面添加的内容是什么
    //size      文件大小
    //compiler.hooks.compile.tap('CopyrightWebpackPlugin', (compilation)       同步的时刻写法

编写webpack插件时 通过node调试工具查看其中内容

package.json
    scripts: {
        debug: node --inspect --inspect-brk node_modules/webpack/bin/webpack.js
    }

使用node执行webpack.js这个文件,运行webpack.js的时候,传递一些node的参数进去 --inspect 开启node调试工具 --inspect-brk 在运行webpack.js做调试的时候第一行上打一个断点

作用: 制作插件时查看compilation里面的参数时 debugger;

浏览器-> f12 -> 点击node图标 -> 在watch中监听对变量的内容

文件资料: compiler的资料 webpack官网 api-》Complier

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值