2014-11-27 13 views
13

Ich versuche, eine Klasse in meiner node.js/express-App zu erstellen.node.js/ES6/Klassenerstellung: SyntaxError: Unerwartetes reserviertes Wort

Es in Grund js arbeitet/Prototyp-Modus wie:

function MyClass() { 
    /* constructor code */ 
}; 

MyClass.prototype.myMethod = function() { 
    /* method code */ 
}; 

module.exports = MyClass; 

Aber ich die Klasse verwenden, Konstruktor tun wollen, erstreckt, ... Schlüsselwörter.

habe ich versuchen, dass:

class MyClass { 
    constructor() { 
     /* constructor code */ 
    } 

    myMethod() { 
     /* method code */ 
    } 

} 

Aber es funktioniert nicht, der Fehler ist:

class MyClass { 
^^^^^ 
SyntaxError: Unexpected reserved word 

Meine Kommandozeile die App mit allen Harmonie Optionen zu starten:

node `node --v8-options | grep harmony | cut -d ' ' -f | xargs` my-app.js 

Eine Idee, meine App bitte korrekt zu starten?

+5

Googles V8-Engine, auf der Node basiert [hat noch keine Unterstützung veröffentlicht] (https://kangax.github.io/compat-table/es6/# class) für ES6 'class's. Im Allgemeinen sollte ES6-Feature-Unterstützung nicht angenommen werden, da der [Standard noch in "Entwurf" ist. (Http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts) (Seitliche Anmerkung: 'Knoten --harmony "aktiviert alle verfügbaren Harmony-Optionen.) –

+0

Haben Sie das gelöst, da ich denselben Fehler habe? –

+0

Ja, alles ist im vorherigen Kommentar. Sie können nicht alle ES6-Funktionen für den Moment verwenden – ceadreak

Antwort

7

Sie können dies tun, mit io.js

iojs --use_strict --harmony_classes my-app.js 

Oder auf node.js mit traceur

var traceur = require('traceur'); 
traceur.require.makeDefault(function(file) { 
    return file.indexOf('node_modules') == -1; 
}); 

require('./my-app').run(); 

Achten Sie darauf, die neuen Funktionen zu testen, bevor sie verwendet wird, einige werden nicht unterstützt. Bearbeiten: Sie können die Kompatibilitätsliste von here

+0

Beachten Sie die Reihenfolge dieser Schalter sind wichtig - der Dateiname muss nach den Schaltern angegeben werden, sonst erhalten Sie nur den gleichen Fehler. –

+0

Dies beantwortet nicht wirklich die ursprüngliche Frage. –

4

Ich hatte dieses Problem.

Es wurde verursacht, weil ich den Quellcode von Nodejs heruntergeladen habe, als er auf meinem Ubuntu gebaut/kompiliert wurde. ./configure dann make und make install.

Aus irgendeinem Grund haben die reservierten ES6-Wörter wie class und extends SyntaxError: Unerwartetes reserviertes Wort geworfen, selbst wenn --harmony Flag verwendet wurde.

Es wurde gelöst, indem ich die nodejs binaries für linux (https://nodejs.org/download/) herunterlade.

Jetzt Klasse und erweitert die Arbeit auch ohne --harmony Flagge.

Ich glaube, das Problem kam von meinem Aufbau/Kompilierungsprozess. Aus irgendeinem Grund wurden die ES6-Ergänzungen nicht ordnungsgemäß erstellt oder konfiguriert.

Die Binärdateien sind nach meinem Verständnis komplett und korrekt für Linux gebaut und daher ist die ES6 korrekt hinzugefügt und konfiguriert.

+2

Welche Version von Knoten verwenden Sie? die 12.6 binäre Version auf Windows scheint nicht zu funktionieren – TroyWorks

7

Sie benötigen eine neuere Version von nodejs. Das class Schlüsselwort ist supported in 4.4.x, aber ich persönlich sehe es in v4.2.6 arbeiten. (Nicht ganz sicher, welche Version von v8 es freigegeben hat, was die Knotenversion erklären würde.)

+0

Ich hatte zwei Versionen von Knoten installiert. Ran "wo Knoten" und erkannte, dass ich die falsche verwendet – Hoppe

+1

@Hoppe - Vielleicht möchten Sie auf nodist schauen. Sie können eine Version des Knotens als globalen Standard und einen anderen für die Verwendung im lokalen Verzeichnis festlegen. Mein Team hat herausgefunden, dass es sehr hilfreich ist, um Probleme mit Versionsverwaltung zu vermeiden. https://github.com/marcelklehr/nodist – ThatBlairGuy

Verwandte Themen