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()
})
})
}