首页 > 解决方案 > 如何让自定义 webpack 解析器将不存在的文件传递给加载器?

问题描述

我们有一堆使用 webpack 代码部署的视频文件(存储在 LFS 中)

我们已将它们移出 CDN,并希望在构建过程中使用带有 publicPath 的 webpack 文件加载器将它们转换为绝对 url。

Webpack barfs,因为该文件不存在。这是我尝试编写一个解析插件来跳过它们,但我仍然得到文件未找到错误....我错过了什么?

var VideoResolver = {
  apply: function(resolver) {
    const target = resolver.ensureHook("resolved");

    resolver.getHook("module").tapAsync("VideoResolver", (request, resolveContext, callback) => {
      if (request.request.startsWith("assets/videos") || request.request.endsWith(".mp4")) {

        const resolved =  {
          path: request.request,
          request: request.request,
          query: request.query,
          resolveToContext:{},
          directory: !request.request.endsWith(".mp4")
        };
        console.log(resolved)
        resolver.doResolve(
          target,
          resolved,
          `skipping video resolve for ${request.request}`,
          resolveContext,
          callback
        );
      } else {
        callback();
      }
    });
  },
};

编辑: 看起来 NormalModule 和 LoaderRunner 读取文件的内容并将其传递给加载程序(这似乎是错误的命名:))。我看不到一种简单的方法来覆盖这种行为

标签: webpackwebpack-4

解决方案


推荐阅读