webpack - 通过 Webpack Plugin 一键导入多个文件
问题描述
我看到了NormalModuleReplacementPlugin(源代码),并且想要做同样的事情,但对于图像 srcsets。
我像这样导入图像:import image from './image.jpg'
,但也想处理 @2x 和 @3x 图像而不必显式导入它们(就像 Metro Bundler/React Native 一样)。
我有这个伪 Webpack 插件:
const path = require('path');
const getSrcSet = (string, number) => string.split('.').join(`@${number}x.`);
class SrcSetPlugin {
apply(compiler) {
const resourceRegExp = /\.jpe?g|png$/i;
compiler.hooks.normalModuleFactory.tap('SrcSetPlugin', (nmf) => {
nmf.hooks.beforeResolve.tap('SrcSetPlugin', (result) => {
if (!result) return;
if (resourceRegExp.test(result.request)) {
// pseudo-code to also import other srcSets
result.request2 = getSrcSet(result.request, 2);
result.request3 = getSrcSet(result.request, 3);
}
return result;
});
nmf.hooks.afterResolve.tap('SrcSetPlugin', (result) => {
if (!result) return;
if (resourceRegExp.test(result.resource)) {
console.log(result);
process.exit(0);
// pseudo-code to also resolve other srcSets
result.resource2 = path.resolve(
path.dirname(result.resource),
getSrcSet(result.resource.split('/').slice(-1), 2),
);
result.resource3 = path.resolve(
path.dirname(result.resource),
getSrcSet(result.resource.split('/').slice(-1), 3),
);
}
return result;
});
});
}
}
module.exports = SrcSetPlugin;
有没有办法告诉 Webpack 为一个 userRequest 处理多个文件?
提前致谢
编辑:
输入
import image from './image.jpg';
输出
console.log(image);
> { 1x: '/images/image.jpg', 2x: '/images/image@2x.jpg', 3x: '/images/image@3x.jpg' }
解决方案
推荐阅读
- lcov - 如何为 C 或 C++ 代码中的代码覆盖添加 LCOV_EXCL_LINE 标记?
- shell - 如何从 shell 脚本编辑 kubernetes 资源
- javascript - 如何在 for 语句中更改 Div 的颜色?
- java - 用于检查范围内任何单元格的 Apache POI 公式不为空
- java - 在 Java 抽象类中初始化“默认”最终属性
- php - 打印多维数组php的内容
- c++ - 静态成员变量在可执行文件和 dll 之间不是全局的
- scala - Scala中方法中的“param:=> TYPE”是什么意思?
- sql - 在oracle数据库中同时运行相关或相同的程序,互不干扰
- cygwin - 我无法在 Cygwin 中运行具有 GPU 加速功能的程序,cygwin 是否允许 GPU?