2017-02-23 10 views
0

Dieser Code wird nicht wie erwartet kompiliert, aber Sie sollten Beispiele im Internet finden.ES6 Arrow Funktion Kompilierfehler

ERROR in ./src/main/javascript/app.js 
Module build failed: SyntaxError: Unexpected token (66:18) 

    64 |  } 
    65 | 
> 66 |  addErrorAlert = (title, message) => { 
    |     ^
    67 |   this.state.toastContainer.error(
    68 |    message, 
    69 |    title, 

Verfahren in Frage, es ist tatsächlich ein Teil einer Klasse EM6 verlauf React.Component

addErrorAlert = (title, message) => { 
    this.state.toastContainer.error(
     message, 
     title, 
     { 
      timeOut: 10000, 
      extendedTimeOut: 10000, 
      preventDuplicates: true, 
      positionClass: "toast-bottom-full-width", 
      showMethod: "fadeIn", 
      hideMethod: "fadeOut" 
     } 
    ); 
}; 

WebPack Config

var path = require('path'); 

var node_dir = __dirname + '/node_modules'; 

module.exports = { 
    entry: './src/main/javascript/app.js', 
    devtool: 'sourcemaps', 
    cache: true, 
    debug: true, 
    resolve: { 
     alias: { 
      'stompjs': node_dir + '/stompjs/lib/stomp.js', 
     } 
    }, 
    output: { 
     path: __dirname, 
     filename: './src/main/resources/static/built/bundle.js' 
    }, 
    module: { 
     loaders: [ 
      { 
       test: path.join(__dirname, '.'), 
       exclude: /(node_modules)/, 
       loader: 'babel-loader', 
       query: { 
        cacheDirectory: true, 
        presets: ['es2015', 'react'] 
       } 
      } 
     ] 
    } 
}; 
+0

Soll die Funktion 'addErrorAlert' irgendetwas zurückgeben oder ist das eine Aktion? –

+0

Es ist nur eine Aktion, aber ich möchte den Status aktualisieren. Ich dachte, dass die Pfeilfunktionen ein Weg sind, die this.method = this.method.bind (this) zu vermeiden, da das nach einer Weile ärgerlich werden kann. – greyfox

Antwort

2

Diese Funktion (class properties) ist noch eine experimentelle Funktion und ist nicht in React und ES2015 Presets enthalten.

Um es mit babel zu transpilieren, müssen Sie die relevante Transformation in die Babel-Konfiguration einschließen.

UPDATE: Hier ist, wie Sie es ermöglichen können: Erstens, installieren Sie das NPM-Paket babel-plugin-transform-class-properties und Ihre webpack Config ändern:

query: { 
    cacheDirectory: true, 
    presets: ['es2015', 'react'], 
    plugins: ['transform-class-properties'] 
} 
+0

Es ist nicht sehr nützlich, einen Link bei einem Benutzer durchzugehen und im Wesentlichen zu sagen: "lies das ". Versuchen Sie es hier zu OP –

+0

@m_callens zu erklären Ich glaube nicht, dass ich die Installationsschritte auf der Seite verlinken soll, sie sind bereits sehr klar. Ich habe klar geantwortet, dass dieses Feature nicht in den Presets enthalten ist, die er benutzt, und nicht einfach "lies das" gesagt hat. – Lucas

+0

Ja vielleicht, aber das bietet keine Auflösung. –

0

Sie müssen class properties ermöglichen, die nicht Teil des ES6 ist.

presets: ['es2015', 'react'], 
plugins: ['transform-class-properties'] 

Oder Sie können einfach die Eigenschaft im Konstruktor zuweisen.

constructor(props, context) { 
    super(props, context); 
    this.addErrorAlert =() => { } 
}