来自 Webpack url-loader 的某些图像上的 404s

404s on some images from Webpack url-loader

有很多很多 的问题,还有很多答案,请阅读下文以了解我尝试过的方法,以及它们为何不起作用。我认为我的问题来自对 url-loader 工作原理的根本误解。

我的 .less 文件中包含这样的图像。我使用两种不同的格式作为我尝试过的示例。

app.less

#logo {
  background-image: url("~/img/LoginMarketingImage.png");
}
#logotwo{
  background-image: url("../public/img/LoginMarketingImage2.png");
}

webpack.config.js

module.exports = {
    context: path.resolve(__dirname, '../../'),
    entry: {
        app: './public/js/app.js'
    },
    output: {
        path: path.resolve(__dirname, '../build'),
        filename: '[name].js',
        publicPath: '/'
    },

我也试过了

webpack.config.js

module.exports = {
    context: path.resolve(__dirname, '../../'),
    entry: {
        app: './public/js/app.js'
    },
    output: {
        path: path.resolve(__dirname, '../build'),
        filename: '[name].js',
        publicPath: ''
    },

以及以下,基于:

webpack.config.js

module.exports = {
    context: path.resolve(__dirname, '../../'),
    entry: {
        app: './public/js/app.js'
    },
    output: {
        path: path.resolve(__dirname, '../build'),
        filename: '[name].js',
        publicPath: 'https://localhost:9081/'
    },

我的模块配置看起来像

webpack.config.js

   module: {
        rules: [
        {
            test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
            loader: 'url-loader',
            options: {
                limit: 2000000,
                name: utils.assetsPath('img/[name].[ext]')
            }
        },
     ]
   }

我已经尝试了 1 的限制和更高的限制,看看内联与非内联是否有效。

我的文件夹结构如下

  build/
  less/
     app.less
  public/
     img/
        LoginMarketingImage.png
        LoginMarketingImage2.png

  config/
     webpack/
        webpack.config.js

我的结果

如果我将限制设置为 1,并强制所有图像直接输出,则它们唯一一次输出是使用 url("../") 语法。 url("~/") 没有抛出 webpack 错误,但图像没有输出到构建文件夹。在这种情况下,使用 url("../") 语法的图像在浏览器中也不会抛出任何错误。然而,这并不理想,因为我想利用 url-loader 的能力来 return 一个 DataURL。在这种情况下,无论 publicPath 设置如何,使用 url("~/") 语法的图像都会给出错误 GET https://localhost:9081/img/logo.png 404 (Not Found)

如果我将限制设置为 20000000,显然 file-loader 没有将图像放入构建文件夹中。但是,无论 publicPath 设置如何,浏览器中的所有图像 return 都是 404。

我觉得我误解了如何使用 url-loader我需要什么样的配置,我应该如何要求我的文件更少,以利用 url-loader 对 return DataURLs 的能力?

编辑:基于this issue,我已确保禁用css 源映射。

我无法确定这里的问题,但问题似乎出在 publicPath 配置上。我 threw together a sample gist 最低需要让 url-loader 正常工作。

一些注意事项:

  • 确保 test 选项正确
  • 你没有提到你使用的是哪个版本的 webpack,但我认为它是 > 2。如果它是 == 2 那么你应该升级,因为较新的版本修复了很多错误和配置 API 几乎 100% 兼容
  • 不要使用波浪号导入路径,它是 project-root-dir/node_modules 的快捷方式(至少在 webpack 1.x 中)
  • 我假设您正在使用 webpack-dev-server。如果没有,那么您不需要设置 publicPath 等
  • 不要更改 url-loader 的 name 选项,除非你在没有它的情况下一切正常。改变它的路径会混淆 webpack