面试题答案
一键面试实现思路
- 创建Webpack插件类:定义一个JavaScript类,该类的构造函数接收插件的配置参数(如果有的话)。
- 绑定Webpack钩子:在类的
apply
方法中,绑定到Webpack的compilation
钩子,因为compilation
阶段会处理模块和依赖。 - 处理.xyz文件:在
compilation
钩子的回调函数中,遍历所有模块,找到后缀名为.xyz
的文件。 - 转换文件内容:读取这些文件的内容,将其中所有小写字母转为大写,然后替换原来的内容。
关键代码片段
class XyzPlugin {
constructor(options) {
// 可以在这里处理插件的配置选项
this.options = options;
}
apply(compiler) {
compiler.hooks.compilation.tap('XyzPlugin', (compilation) => {
compilation.hooks.processAssets.tap({
name: 'XyzPlugin',
stage: compilation.PROCESS_ASSETS_STAGE_PRE_PROCESS
}, (assets) => {
for (const name in assets) {
if (name.endsWith('.xyz')) {
const source = assets[name].source();
const upperCaseContent = source.toString().toUpperCase();
assets[name] = {
source: () => upperCaseContent,
size: () => upperCaseContent.length
};
}
}
});
});
}
}
module.exports = XyzPlugin;
在Webpack配置文件(webpack.config.js
)中使用该插件:
const XyzPlugin = require('./XyzPlugin');
module.exports = {
// 其他Webpack配置...
plugins: [
new XyzPlugin()
]
};