IMAGE:您可能需要一个合适的加载器来处理这种文件类型

IT技术 reactjs webpack
2021-04-16 06:52:39

我无法弄清楚在 ReactJS webpack 中加载图像的正确加载器是什么,

你能帮我一把吗?我收到此错误:

Module parse failed: /Users/imac/Desktop/fakeeh/imgs/logo.png Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type.

这是 webpack 配置:

const path = require('path');


module.exports = {
  // the entry file for the bundle
  entry: path.join(__dirname, '/client/src/app.jsx'),

  // the bundle file we will get in the result
  output: {
    path: path.join(__dirname, '/client/dist/js'),
    filename: 'app.js',
  },

  module: {

    // apply loaders to files that meet given conditions
    loaders: [{
      test: /\.jsx?$/,
      include: path.join(__dirname, '/client/src'),
      loader: 'babel-loader',
      query: {
        presets: ["react", "es2015", "stage-1"]
      }
    }],
  },

  // start Webpack in a watch mode, so Webpack will rebuild the bundle on changes
  watch: true
};

非常感激!!

4个回答

我也遇到了这个问题,我找到了一个解决方法。

首先,您需要安装两个加载器(file-loader、url-loader)。例如 $ npm install --save file-loader url-loader

如果你想支持css。确保安装样式加载器。例如, $ npm install --save style-loader css-loader

接下来,您更新 webpack 配置,请检查下面我的示例配置。希望能帮助到你。

  module: {
    loaders: [{
      test: /.jsx?$/,
      loader: 'babel-loader',
      exclude: /node_modules/
    }, {
      test: /\.css$/,
      loader: "style-loader!css-loader"
    }, {
      test: /\.(jpe?g|png|gif|woff|woff2|eot|ttf|svg)(\?[a-z0-9=.]+)?$/,
      loader: 'url-loader?limit=100000' }]
  },
它在 npm 安装中提到了 file-loader 和 url-loader,但在 webpack 配置中,只提到了 url-loader。这是为什么?url-loader 在幕后使用 file-loader 吗?
2021-05-27 06:52:39
@redfox05 似乎 url-loader 可能在幕后使用 file-loader。我试图按照 webpack 文档的说明进行操作,webpack.js.org /loaders/ url-loader 并且只添加了“url-loader”,但我收到一个错误,指出找不到“file-loader”。安装了“文件加载器”,一切正常。
2021-06-10 06:52:39
我不得不指出,这种格式不再支持参数“?limit=100000”,您需要指定一个名为“options”的新字段,并在那里定义限制。因此, loader 的值将只是 'url-loader'
2021-06-13 06:52:39

您可以使用文件加载器你需要先使用 npm 安装它,然后像这样编辑你的 webpack 配置

module: {

    // apply loaders to files that meet given conditions
    loaders: [{
      test: /\.jsx?$/,
      include: path.join(__dirname, '/client/src'),
      loader: 'babel-loader',
      query: {
        presets: ["react", "es2015", "stage-1"]
      }
    },
    {
      test: /\.(gif|svg|jpg|png)$/,
      loader: "file-loader",
    }],
  },
@PrakashSharma,谢谢,我认为我的不起作用,因为它是遗留的,大约一年前,今天才发现按照您的指示它确实起作用了。
2021-05-24 06:52:39

使用 Webpack 3,您可以使用url-loader如下:

安装url-loader

npm install --save url-loader

然后,在您的 Webpack 配置中:

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/i,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192
            }
          }
        ]
      }
    ]
  }
}

最后,在您的代码中:

<img src={require('./path/to/image.png')} />
谢谢,这很有效,因为我们已经在使用 url-loader。
2021-06-18 06:52:39

有时,解决方案更简单,而且就在您面前。

我立即开始用谷歌搜索这个问题。但是我在测试中缺少 jpg 扩展名。

所以..我的测试是:

test: /.(png|woff(2)?|eot|ttf|svg|gif|jpe?g)(\?[a-z0-9=\.]+)?$/