【问题标题】:IMAGE: You may need an appropriate loader to handle this file type图片:您可能需要适当的加载程序来处理此文件类型
【发布时间】:2018-02-01 12:51:28
【问题描述】:

我不知道在 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
};

非常感谢!!

【问题讨论】:

    标签: reactjs webpack


    【解决方案1】:

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

    首先,您需要安装两个加载器(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 install 中提到了 file-loader 和 url-loader,但在 webpack 配置中,只提到了 url-loader。这是为什么? url-loader 在后台使用 file-loader 吗?
    • @redfox05 似乎 url-loader 可能在幕后使用文件加载器。我尝试按照 webpack 文档webpack.js.org/loaders/url-loader 的说明进行操作,只添加了“url-loader”,但收到一条错误消息,指出未找到“file-loader”。安装了“文件加载器”,一切正常。
    • 我不得不注意到这种格式不再支持参数“?limit=100000”,您需要指定一个名为“options”的新字段,并在那里定义限制。因此,loader 的值就是 'url-loader'
    【解决方案2】:

    您可以使用file-loader。你需要先使用 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,谢谢,我认为我的不起作用,因为它是旧的,大约一年前,今天才发现按照您的指示它确实起作用。
    【解决方案3】:

    使用 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,所以效果很好。
    【解决方案4】:

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

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

    所以..我的测试是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2019-09-16
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      相关资源
      最近更新 更多