称为 fileName 的输出资源
compilation.assets[fileName] = {
// 返回文件内容
source: () => {
// fileContent 既可以是代表文本文件的字符串,也可以是代表二进制文件的 Buffer
return fileContent;
},
// 返回文件大小
size: () => {
return Buffer.byteLength(fileContent, 'utf8');
}
};
callback();
});
// 读取 compilation.assets 的代码如下:
compiler.plugin('emit', (compilation, callback) => {
// 读取名称为 fileName 的输出资源
const asset = compilation.assets[fileName];
// 获取输出资源的内容
asset.source();
// 获取输出资源的文件大小
asset.size();
callback();
});
判断webpack使用了哪些插件
// 判断当前配置使用使用了 ExtractTextPlugin,
// compiler 参数即为 Webpack 在 apply(compiler) 中传入的参数
function hasExtractTextPlugin(compiler) {
// 当前配置所有使用的插件列表
const plugins = compiler.options.plugins;
// 去 plugins 中寻找有没有 ExtractTextPlugin 的实例
return plugins.find(plugin=>plugin.__proto__.constructor === ExtractTextPlugin) != null;
}
总结
一般情况下,我们是不需要去写Plugin
,但是有时候我们有些业务需求是没有插件可以满足的,那么我们便得需要自己去写Plugin
,那了解Plugin
的一些相关知识点就是有必要的,我们不一定要每个钩子或是API都相当熟,但是我们需要思路,了解如何编写Plugin
,也是有必要的,Plugin
中最重要的compiler和compilation,一个Plugin
插件也就是围绕着这个去扩展,对应详细内容可以去webpack官网了解,compiler链接,compilation链接。