2016-08-29 5 views
1

Hi Ich ging durch this Tutorial und ich habe meine Webpack-Konfiguration basierend auf this Tutorial.Problem running react-redux mit webpack

Unabhängig habe ich die folgende Datei index.js

import React from 'react' 
import { render } from 'react-dom' 
import { Provider } from 'react-redux' 
import { createStore } from 'redux' 
import todoApp from './reducers' 
import AppComp from './components/App' 

let store = createStore(todoApp) 

let App = React.createClass({ 
    render:() => { 
    return (
     <Provider store={store}> 
     <AppComp /> 
     </Provider> 
    ) 
    } 
}); 

render(
    <App/>, 
    document.getElementById('app') 
) 

Und meine webpack Konfiguration

var HtmlWebpackPlugin = require ('html-webpack-plugin'); 
var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({ 
    template: __dirname + '/app/index.html', 
    filename: 'index.html', 
    inject: 'body' 
}); 

module.exports = { 
    entry: [ 
     './app/index.js' 
    ], 
    output: { 
     path: __dirname + '/dist', 
     filename: 'index_build.js' 
    }, 

    module: { 
     loaders: [ 
      { 
       test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader', presets: ['es2015', 'react'] 
      }, 
     ] 
    }, 
    plugins: [HtmlWebpackPluginConfig] 
}; 

Wenn ich die app mit webpack laufen, bekam ich folgende Fehlermeldung

ERROR in ./app/index.js 
Module build failed: SyntaxError: Unexpected token (13:6) 

    11 | render:() => { 
    12 |  return (
> 13 |  <Provider store={store}> 
    |  ^
    14 |   <App /> 
    15 |  </Provider> 
    16 | ) 

Kann mir jemand helfen, diesen Fehler zu beheben?

Bearbeiten: Das Problem war die Art und Weise, wie ich meine Webpack-Konfigurationen definiert, die Voreinstellungen sollten im Abfrageblock sein. Hier ist meine aktualisierte Webpack-Konfigurationsdatei

var HtmlWebpackPlugin = require('html-webpack-plugin') 
var HTMLWebpackPluginConfig = new HtmlWebpackPlugin({ 
    template: __dirname + '/app/index.html', 
    filename: 'index.html', 
    inject: 'body' 
}); 

module.exports = { 
    entry: [ 
    './app/index.js' 
    ], 
    output: { 
    path: __dirname + '/dist', 
    filename: "index_bundle.js" 
    }, 
    module: { 
    loaders: [ 
     { 
      test: /\.js$/, 
      exclude: /node_modules/, 
      loader: 'babel-loader', 
      query: { 
      presets: ['react', 'babel-preset-react'] 
      } 
     } 
    ] 
    }, 
    plugins: [HTMLWebpackPluginConfig] 
}; 
+0

Diese Fehlermeldung zeigt an babel-Preset-react nicht gefunden ... Ich werde Ihnen eine .babelrc umfassen vorschlagen Datei in Ihrem Stammverzeichnis mit '{ " Voreinstellungen ": [" babel-preset-es2015 "," babel-preset-react "] }' –

+0

versucht, aber es hat nicht funktioniert. –

+0

Haben Sie babel-preset-react installiert?/ –

Antwort

1

Sie müssen Babel-Voreinstellungen angeben. Sie können .babelrc verwenden

{ 
    "presets": [ 
    "react", 
    "es2015" 
] 
} 

oder Sie es in Ihrem loader Abfrage angeben:

loaders: [ 'babel?presets[]=react,presets[]=es2015' ] 
0

Sie müssen npm Modul 'Pfad' für die Definition Pfad verwenden. Hier ist die Datei webpack.config.js

+0

Das ist nicht korrekt. Sie können in meiner Konfigurationsdatei sehen, dass ich Verkettung anstelle von Pfad verwende. 'Pfad: path.join (__ Verzeichnisname, '/ dist')' wäre äquivalent zu 'Pfad: __dirname + '/ dist'' –

+0

Zeichenfolge Verkettung wird nicht in Windows als __dirname haben Einschränkungen dort. Sie können das in Windows überprüfen. Ich habe vorher ähnliches Problem gesehen. Lass mich nochmal schauen. Ich kann sehen, es gibt viele String-Verkettungen in der Datei webpack.config.js. du könntest dich ändern. –

+0

Ich benutze keine Fenster. –