You may need an appropriate loader to handle this file type

662
09 августа 2017, 22:18

Вылетает ошибка в webpack при попытке срендерить этот код:

import React from 'react';
import ReactDOM from 'react-dom';

class Hello extends React.Component {
  render() {
    return (<h1>Hello</h1>)
  }
}
ReactDOM.render(<Hello/>, document.getElementById('hello'));

Лог в консоли:

ERROR in ./web_client/app.js
Module parse failed: D:\doSociety\Product\Site\web_client\app.js Unexpected token (8:12)
You may need an appropriate loader to handle this file type.
| class Hello extends React.Component {
|   render() {
|     return (<h1>Hello</h1>)
|   }
| }

Содержимое webpack.config.js:

var path = require('path');
var webpack = require('webpack');

module.exports = {
   entry:  './web_client/app.js',
   output:  {
       path: './society/static/js/',
       filename: 'app.js'
   },
   resolve: {
       extensions: ['', '.js', '.jsx', '.scss'],
       modulesDirectories: [
           'node_modules'
       ]
   },
   module: {
       rules: [
           {
               test: /\.jsx?$/,
               use: [
                  {loaders: 'babel-loader'}
               ],
               include: [
                    "web_client"
               ],
              exclude: /node_modules/,
               query: {
                   plugins: ['transform-runtime'],
                   presets: ['es2015', 'stage-0', 'react']
               }
           },
           {
               test: /\.s[a|c]ss$/,
               use: [
                'style-loader',
                'css-loader',
                'sass-loader'
               ]
           }
       ]
   },
   sassLoader: {
       includePaths: [
          "./web_client",
           "./node_modules/bootstrap/scss"
       ]
   }
}

Webpack версии 2.2.0
Поправил конфиг на:

var path = require('path');
var webpack = require('webpack');

module.exports = {
   entry:  './web_client/app.js',
   output:  {
       path: './society/static/js/',
       filename: 'app.js'
   },
   resolve: {
       extensions: ['', '.js', '.jsx', '.scss'],
       modulesDirectories: [
           'node_modules'
       ]
   },
   module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['babel'],
    }]
   }
}

Начало выдавать:

Module build failed: SyntaxError: D:/doSociety/Product/Site/web_client/app.js: Unexpected token (8:12)
   6 | class Hello extends React.Component {
   7 |   render() {
>  8 |     return (<h1>Hello</h1>)
     |             ^
   9 |   }
  10 | }
  11 |
Answer 1

Надо в конфиге babel включить пресет react:

Файл .babelrc содержимое

{
  "presets": ["react"]
}

https://babeljs.io/docs/plugins/preset-react/

На самом деле, может понадобиться подключить ещё несколько пресетов, если поддержка браузерами ES6 не соответствует желаемой.

READ ALSO
Как взять высоту одного блока и присвоить её другому? jQuery

Как взять высоту одного блока и присвоить её другому? jQuery

Собственно нужно брать высоту одного блока и при загрузке документа присваивать его другомуКак это можно реализовать ?

519
Проблема с cdn от yandex

Проблема с cdn от yandex

Есть сайтНа нём до меня подключали скрипты от cdn yandex'a

314
Как запустить webpack через npm скрипты?

Как запустить webpack через npm скрипты?

У меня в проекте, есть несколько сайтов с кардинально разными webpack конфигамиЯ хочу запускать сборку через npm start -имяСайта (т

369
Постановка задачи Javascript [требует правки]

Постановка задачи Javascript [требует правки]

Есть эксель таблица, там есть много квартир и там данные по деньгам, как реализовать оплату исходя из данных в таблице? Как это примерно возможно...

388