Webpack插件里怎么拿到编译后的资源列表?
我正在写一个自定义的 Webpack Plugin,想在编译完成后获取所有输出的资源文件名(比如 main.js、index.css 这些),但不知道该在哪个钩子里拿,也不清楚具体怎么访问到这些信息。
试过在 emit 阶段用 compilation.assets,但打印出来是个对象,key 是文件名,值看起来是 source 对象,不太确定是不是正确的做法。有没有更标准的方式?比如能不能直接拿到一个字符串数组?
class MyPlugin {
apply(compiler) {
compiler.hooks.emit.tap('MyPlugin', (compilation) => {
console.log(Object.keys(compilation.assets)); // 这样对吗?
});
}
}
首先建议把插件移到 done 钩子,这样确保所有处理都完成了。然后直接从 compilation 中提取资源信息:
这样得到的就是一个干净的文件名数组了。用 stats 对象的好处是它包含了更多上下文信息,比如每个文件的大小、类型等,以后扩展也方便。
不过得提醒下,别忘了给插件增加 options 接口,生产环境可能需要配置过滤规则啥的,毕竟不是所有输出都需要处理。这些细节就靠你自己把握了,反正基本思路就是这样。
Object.keys(compilation.assets)就行了,这会给你一个输出资源文件名的字符串数组。