webpack - 在 Webpack 5 中禁用资源捆绑

标签 webpack webpack-5

当我在 Webpack 5 中引用 Assets 时,它默认会创建它的副本。例如,./assets/fonts/myfont.woff2 中的字体文件被复制到 ./b27297c148a7ef314ce2.woff2,这在使用源文件夹和 dist 文件夹时非常有用。但是,我需要使用源文件和捆绑的 css 文件中的相同资源目录。有没有办法禁用文件复制并仅根据捆绑输出文件的目标更新资源文件的路径?

更新:

我已成功将复制目标设置为与我的资源文件的源目标相同:

/*webpack.config.js*/
module.exports = {
  output: {
    assetModuleFilename: '[file]'
  },
};

但是,这并不理想,因为所有文件都会被自身覆盖。

最佳答案

我找到了以下解决方案。在此示例中,/asset 文件夹内的所有文件均保留在适当位置:

/*webpack.config.js*/

module.exports = {
  module: {
    rules: [
      {
        test: /^assets\/.*$/i,
        type: 'asset/resource',
        /* do not emit copies of files */
        generator: {
          emit: false
        }
      },
    ],
  },
  output: {
    /* use original file-path in generated output files */
    assetModuleFilename: '[file]'
  },
};

不幸的是我在官方文档中没有找到任何相关内容,答案基于:https://github.com/webpack/webpack/pull/12871

由于某种原因,这似乎不适用于启用了watch选项的情况 (使用 webpack 5.44.0webpack-cli 4.7.2 进行测试。)

关于webpack - 在 Webpack 5 中禁用资源捆绑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68737296/

相关文章:

jwt - 如何在 Webpack 5 中为 jsonwebtoken 填充缓冲区

javascript - Webpack-dev-server 不热刷新我的客户端文件

css - 使用 svg-url-loader 在 webpack 中加载 svg

laravel - 在 Laravel 应用程序中使用 NPM 包时遇到问题

unit-testing - 使用 Webpack、Jasmine (-core)、typescript 进行单元测试

javascript - Webpack 'production' 模式不编译任何内容

node.js - 如何使用纯ESM导出 `webpack.config.js`的配置?

php - 在 Symfony 4 中添加 Bootstrap

Webpack 5 : devtool ValidationError, 无效的配置对象

node.js - webpack < 5 不包含 Node.js 核心模块的 Polyfill