2016-12-25 5 views
1

ich eine einfache Dateistruktur für meine JS-Dateien haben:Webpack wirft eine seltsame Syntaxfehler in JS-Datei

let forms = require('./forms/forms'); 

und die Formen:

bundle.js 
src 
| 
-- main.js 
-- forms 
     | 
     -- forms.js 

Meine main.js Datei sieht wie folgt aus. js Dateien sieht wie folgt aus:

export default class Forms { 
    test =() => { 
     alert('Forms.test() executed!'); 
    } 
} 

var forms = new Forms(); 
forms.test(); 

Dies führt den folgenden Fehler:

Hash: a1ed74e596de181cec27 
Version: webpack 1.14.0 
Time: 21592ms 
       Asset Size Chunks    Chunk Names 
./static/js/bundle.js 277 kB  0 [emitted] main 
+ 3 hidden modules 

ERROR in ./static/js/src/forms/forms.js 
Module build failed: SyntaxError: Unexpected token (4:6) 

    2 | 
    3 | export default class Forms { 
> 4 | test =() => { 
    |  ^
    5 |  alert('Forms.test() executed!'); 
    6 | } 
    7 | } 

@ ./static/js/src/main.js 4:12-36 

Es gibt einen Syntaxfehler für die Zeile, in der die Methode test() definiert ist. Ich habe den babel-loader hinzugefügt und in der Datei main.js wird ES6-Code transpiliert und korrekt ausgeführt.

sieht Meine webpack.config.js-Datei wie folgt:

module.exports = { 
    entry: './static/js/src/main.js', 
    output: { 
    filename: './static/js/bundle.js' 
    }, 
    watch: true, 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel', 
     query: { 
      presets: ['es2015'] 
     } 
     } 
    ], 
    } 
}; 

der babel-Loader auf der forms.js Datei oder etwas nicht richtig funktioniert? Ich habe die Datei oder ihren Ordner in der Konfigurationsdatei oder irgendetwas nicht ausgeschlossen, also warum der Syntaxfehler? Ich weiß, das ist gültig JS, wie ich es in einem anderen Projekt geschrieben habe und es hat gut funktioniert.

Btw, import in der Datei main.js funktioniert auch nicht, während andere ES6-Funktionen funktionieren? Hat das etwas damit zu tun?

Antwort

2

ES Class Fields & Static Properties ist nicht Bestandteil von ECMASCRECMAScript 2015/2016, sondern ein Vorschlag der Stufe 2.

Um es zu verwenden, müssen Sie babel konfigurieren, um die Class properties transform einzuschließen.

Sie können npm install nur das Class properties transform Plugin in Ihrem babel-loader query:

query: { 
    presets: ['es2015'], 
    plugins: ['transform-class-properties'] 
} 

Oder npm install die stage 2 preset und schließen Sie sie als Preset in Ihrem babel-loader Abfrage:

query: { 
    presets: ['es2015', 'stage-2'] 
} 
+0

Danke! Ich verstehe einfach nicht, was du mit '.babelrc' meinst. Wo finde ich diese Datei? I npm hat das Transformations-Plug-In für Klasseneigenschaften installiert und das base-2-Preset webpack.config.js unter dem Babel-Loader hinzugefügt, aber es heißt: 'Modul-Build ist fehlgeschlagen: Fehler: Preset" stage-2 "konnte nicht relativ zum Verzeichnis gefunden werden '. –

+1

Ich habe die Antwort aktualisiert - wenn Sie die Transformation installiert haben, schließen Sie sie als Plugin ein, wenn Sie die stage2-Voreinstellung installiert haben, fügen Sie sie als Voreinstellung ein. Probieren Sie es jetzt. –

+0

Okay, es funktioniert jetzt, danke! Ich habe gerade npm installiert Klasseneigenschaften transformieren und modifiziert die Abfrage babel-loader in webpack.config.js :) –

2

definieren Sie können es als eine reguläre Methode stattdessen:

export default class Forms { 
    test() { 
     alert('Forms.test() executed!'); 
    } 
} 
+0

Aber was, wenn ich Pfeilfunktionen verwenden möchte? Ich meine, in einem früheren Projekt konnte ich Methoden so definieren, wie ich es möchte, aber dieses Mal gibt es mir einen Syntaxfehler? Wie kann ich es möglich machen? –

+0

Wenn die Definition mit "traditioneller" Methode nicht zufriedenstellend ist, überprüfen Sie Oris Antwort. – Scimonster

+0

@erol_smsr Ich bin nicht sicher, warum Sie in diesem Fall die Pfeilfunktionen verwenden möchten. Die Syntax ist umständlicher und es wird nicht garantiert, dass sie in zukünftigen JavaScript-Versionen funktioniert. – 4castle

Verwandte Themen