cannot load png files with webpack, unexpected character

48,308

Solution 1

You are missing an appropriate loader that would match that png of yours. To fix this, set up either url-loader or file-loader so that it matches your png.

url-loader has a limit option you may find useful. It allows you to control whether or not it emits dataurls (inline) or paths (uses file-loader and emits files matching to paths).

Solution 2

You can use image-webpack-loader with file-loader https://www.davidmeents.com/blog/how-to-set-up-webpack-image-loader/

1) install them

$npm install image-webpack-loader file-loader --save-dev

2) add to webpack.config.js below babel-loader your new set: image-webpack-loaders and file-loader

module: {
    loaders: [
      {
        test: /\.jsx?$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015', 'stage-0'],
          plugins: ['react-html-attrs', 'transform-class-properties', 'transform-decorators-legacy'],
        }
      }, 
      {
        test: /\.(jpe?g|png|gif|svg)$/i,
        loaders: [
          'file-loader?hash=sha512&digest=hex&name=[hash].[ext]',
          'image-webpack-loader?bypassOnDebug&optimizationLevel=7&interlaced=false'
        ]
      } 
    ]
  },

3) Import your .jpg file into variable (for me it is 'imgabout' variable) and add this variable into src

import React from 'react';
import imgabout from './img-about.jpg';
export default class Article extends React.Component {
render() {

    const { title } = this.props; 

    return (
      <div class="col-md-6"> 
         <img class="img-about" src={imgabout} alt="Logo" />
      </div> 
    );}}  

Solution 3

Try to Restart the packager it fix it for me.

Solution 4

Just an update, I got warnings using this setup for webpack.config.js

So to solve the warnings I have to change to this:

{
        test: /\.(jpe?g|png|gif|svg)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              query: {
                name:'assets/[name].[ext]'
              }
            }
          },
          {
            loader: 'image-webpack-loader',
            options: {
              query: {
                mozjpeg: {
                  progressive: true,
                },
                gifsicle: {
                  interlaced: true,
                },
                optipng: {
                  optimizationLevel: 7,
                }
              }
            }
          }]
      }
Share:
48,308
caffeinescript
Author by

caffeinescript

Updated on March 12, 2020

Comments

  • caffeinescript
    caffeinescript about 4 years

    Im trying to reconfigure my webpack, and now i cannot load the css files. i keep my styles in src > styles > main.css

    I am getting errors such as

    ERROR in ./src/images/NavIcon03.png
    Module build failed: SyntaxError: /Users/myname/work/site/src/images/NavIcon03.png: Unexpected character '�' (1:0) 
    

    Here is my webpack configuration

    var webpack = require('webpack')
    
    
    module.exports = {
      entry: [
        './src/main.js'
      ],
      output: {
        path: __dirname,
        publicPath: '/',
        filename: 'bundle.js'
      },
      module: {
        loaders: [{
          exclude: /node_modules/,
          loader: 'babel'
        },
            {
              test: /\.css$/, // Only .css files
              loader: 'style!css' // Run both loaders
            }]
      },
      resolve: {
        extensions: ['', '.js', '.jsx']
      },
      devServer: {
        contentBase: './'
      }
    };
    

    Below is the package.json

    {
      "name": "website",
      "version": "0.0.1",
      "dependencies": {
        "ampersand-app": "^1.0.4",
        "ampersand-model": "^5.0.3",
        "ampersand-react-mixin": "^0.1.3",
        "ampersand-rest-collection": "^4.0.0",
        "ampersand-router": "^3.0.2",
        "asynquence": "^0.8.2",
        "autoprefixer": "^5.2.0",
        "autoprefixer-core": "^5.2.0",
        "autoprefixer-stylus": "^0.7.0",
        "axios": "^0.9.1",
        "babel": "^5.5.8",
        "babel-core": "^5.5.8",
        "babel-loader": "^5.1.4",
        "bootstrap": "^3.3.6",
        "bootstrap-webpack": "0.0.5",
        "css-loader": "^0.15.1",
        "d3": "^3.5.12",
        "file-loader": "^0.8.4",
        "font-awesome": "^4.5.0",
        "google-map-react": "^0.9.3",
        "history": "^1.17.0",
        "hjs-webpack": "^2.6.0",
        "json-loader": "^0.5.2",
        "local-links": "^1.4.0",
        "lodash": "^4.3.0",
        "lodash.assign": "^3.2.0",
        "lodash.has": "^3.2.1",
        "lodash.merge": "^3.3.1",
        "lodash.pick": "^3.1.0",
        "lodash.result": "^3.1.2",
        "milliseconds": "^1.0.3",
        "moment": "^2.11.1",
        "node-libs-browser": "^0.5.2",
        "object-assign": "^4.0.1",
        "octicons": "^2.2.0",
        "postcss-loader": "^0.5.0",
        "qs": "^3.1.0",
        "react": "^0.14.6",
        "react-avatar-editor": "^3.2.0",
        "react-bootstrap": "*",
        "react-bootstrap-table": "^1.3.3",
        "react-bootstrap-validation": "^0.1.11",
        "react-cropper": "^0.6.0",
        "react-d3-components": "^0.6.0",
        "react-dom": "^0.14.6",
        "react-dropzone": "^3.3.0",
        "react-dropzone-component": "^0.8.1",
        "react-facebook-login": "^2.0.3",
        "react-fileupload": "^1.1.3",
        "react-google-maps": "^4.7.1",
        "react-hot-loader": "^1.3.0",
        "react-input-slider": "^1.5.0",
        "react-redux": "^4.4.0",
        "react-router": "^2.0.0",
        "react-select": "^1.0.0-beta8",
        "react-star-rating-component": "^0.1.0",
        "redux": "^3.3.1",
        "redux-promise": "^0.5.1",
        "slugger": "^1.0.0",
        "standard": "^4.3.1",
        "style-loader": "^0.12.3",
        "stylus-loader": "^1.2.1",
        "surge": "^0.14.2",
        "url-loader": "^0.5.6",
        "webpack": "^1.9.11",
        "webpack-dev-server": "^1.9.0",
        "xhr": "^2.0.2",
        "yeticss": "^6.0.7"
      },
      "license": "",
      "private": true,
      "scripts": {
        "build": "webpack",
        "deploy": "surge -p public -d labelr.surge.sh",
        "start": "webpack-dev-server",
        "yolo": "git add --all && git commit -am \"$(date)\" && npm version minor && git push origin master --tags && npm run build && npm run deploy"
      },
      "devDependencies": {
        "babel-preset-react": "^6.5.0",
        "css-loader": "^0.15.6",
        "redux-devtools": "^3.1.1",
        "style-loader": "^0.12.4"
      }
    }
    
  • Sibelius Seraphini
    Sibelius Seraphini almost 8 years
    I'm using url-loader { test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192', }, but I'm having the same error, I think it is an issue with babel-loader
  • Juho Vepsäläinen
    Juho Vepsäläinen almost 8 years
    I would need a simple project to run to tell any better.
  • Sibelius Seraphini
    Sibelius Seraphini almost 8 years
    I'm using this boilerplate: github.com/kitconcept/webpack-starter-angular
  • Juho Vepsäläinen
    Juho Vepsäläinen almost 8 years
    @SibeliusSeraphini Can you link me to a version of that which fails straight away? I need to understand what you are doing exactly as I don't want to guess. The boilerplate doesn't come with any images. :)
  • Sibelius Seraphini
    Sibelius Seraphini almost 8 years
    here is the example with an image: github.com/Lar21/webpack-starter-angular/blob/master/src/…, I've got 404 on that image, sorry for the delay to answer
  • Sibelius Seraphini
    Sibelius Seraphini almost 8 years
    I've fixed my problem using the following approach: github.com/petehunt/webpack-howto/issues/…
  • Eric. M
    Eric. M about 3 years
    do i need to create webpack.config.js file in my root of the project ? and i think i need to ade exporsts.module to this code right ?