webpack自定义插件plugin 过程

const fs=require('fs')
const readFileAsync=require('util').promisify(fs.readFile) //异步读取文件
const writeFileAsync=require('util').promisify(fs.writeFile)//异步写文件
class StaticChage{
    // apply 是固定写法,自动执行
    apply(complier){
        // complier.hooks 中包含一些钩子函数
        // emit 编译完成还没有输出dist目录
        // complie 每完成一次支援的编译触发一次
        // done 编译完成已经输出dist
        complier.hooks.done.tap('changeStatic',(componcition)=>{
            // complier.options.context 结果是项目根目录   E:\study\webP
            var context=complier.options.context;
            var path=context+'/dist'
            // componcition.toJson().assets  是数组,对应的 dist目录下的每个文件信息
            componcition.toJson().assets.forEach(ast=>{
                readFileAsync(path+'/'+ast.name).then((cnt)=>{
                    // cnt 是文件的内容
                    
                    	// cnt 加工处理后在写入
                   	 writeFileAsync(path+'/'+ast.name,cnt)
              	  })
           	 })
        })
    }
}

module.exports =StaticChage

//源文件文件内容添加到打包后的文件

const {RawSource} =require('webpack-sources')
  a.prototype.apply=function(compiler){
    compiler.hooks.thisCompilation.tap('mypluge',(compilation)=>{
        compilation.hooks.additionalAssets.tapAsync('Plugin2',(cb)=>{
            const content='hello plugin2';
            compilation.assets['a.txt']={
                size(){
                    return content.length;
                },
                source(){
                    return content;
                }
            }
            const {RawSource} =require('webpack-sources')
            const data= fs.readFileSync(path.resolve(__dirname,'../loaders/b.txt'));
            // 方式1
            // compilation.assets['b.txt']= new RawSource(data)
            //方式2
            compilation.emitAsset('b.txt',new RawSource(data))
            cb()
        })
    })

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值