如何不缓存加载器输出

How to NOT cache loader output?

本文关键字:输出 加载 缓存 何不      更新时间:2023-09-26

Webpack 默认缓存加载器

比如说,我有以下加载器,

module.exports = function(source) {
  // Note I'm explicitly saying not to cache
  this.cacheable(false);
  return 'module.exports = ' + Math.random();
}

每次我require('./asset.ext'),我都会得到相同的随机数。如何从加载程序获得同一资源的不同输出。

我打算在哪里使用它?

我想用JS和CSS require('./image.png')。在 css 中,css-loader 帮助我实现这一点,其中url(./image.png)根据需要进行处理。加载器不知道发行人。所以我写了一个插件,告诉加载器关于发行者并且工作正常。但是当我开始在 CSS 和 JS 中使用它时,无论哪个先被调用,加载器都会缓存输出,并返回相同的输出。我想防止这种情况。对于JS,我想返回一个对象,对于CSS,我想返回一个字符串。

有点笨拙,但为什么不创建一个从image.pngimage-copy.png的符号链接,然后对JS使用一个文件名,为CSS使用另一个文件名?就要求而言,它们是两个不同的文件,因此它将再次加载它。

回答我自己的问题,

我没有尝试不缓存加载器,而是为返回的对象编写了一个覆盖toString,以便在 CSS 中需要时触发此方法并得到所需的字符串。

在这里实施 - https://github.com/boopathi/image-size-loader/blob/master/index.js#L14-L19

module.exports = JSON.stringify(o);
module.exports.toString = () => JSON.stringify(o.src);