2014-11-27 12 views
13

Próbuję utworzyć klasę w mojej aplikacji node.js/express.node.js/ES6/tworzenie klasy: SyntaxError: nieoczekiwane zarezerwowane słowo

Działa w podstawowych js/tryb prototyp takich jak:

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

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

module.exports = MyClass; 

Ale chcę zrobić używać tej klasy, konstruktor, rozciąga się ... słowa kluczowe.

mam spróbować:

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

    myMethod() { 
     /* method code */ 
    } 

} 

Ale to nie działa, błąd jest:

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

Mój wiersz poleceń, aby uruchomić aplikację z wszystkich opcji Harmony:

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

Pomysł, aby poprawnie uruchomić moją aplikację, proszę?

+5

Silnik wyszukiwarki Google V8, na którym zbudowany jest węzeł [jeszcze nie udostępnił wsparcia] (https://kangax.github.io/compat-table/es6/# class) dla klas ES6. Ogólnie rzecz biorąc, obsługa funkcji ES6 nie powinna być zakładana, ponieważ [standard wciąż znajduje się w "projekcie".] (Http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts) (Nota boczna: 'węzeł --harmony' umożliwi dostęp do wszystkich dostępnych opcji Harmony.) –

+0

Rozwiązałeś to, ponieważ mam ten sam błąd? –

+0

Tak, wszystko jest w poprzednim komentarzu. Nie możesz użyć wszystkich funkcji ES6 na chwilę. – ceadreak

Odpowiedz

7

Można to zrobić z io.js

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

Albo na node.js z traceur

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

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

Upewnij się, aby przetestować nowe możliwości przed ich użyciem, niektóre nie są obsługiwane. Edycja: Można sprawdzić listę zgodności od here

+0

Warto zauważyć, że kolejność tych przełączników jest ważna - nazwa pliku musi być określona po przełącznikach, inaczej otrzymasz ten sam błąd. –

+0

To nie odpowiada na oryginalne pytanie. –

4

Miałem ten problem.

Wynikało to z faktu, że pobrałem kod źródłowy nodejs, a nie skompilowałem go na moim Ubuntu. ./configure, a następnie make i make install.

Z jakiegoś powodu ES6 zarezerwowanych słów jak class i extends rzucali SyntaxError: Nieoczekiwane słowa zastrzeżonego, nawet podczas korzystania --harmony flagę.

Zostało to rozwiązane przeze mnie, pobierając pliki binarne nodejs dla Linuksa (https://nodejs.org/download/).

Teraz klasa i przedłuża pracę nawet bez flagi --harmony.

Wierzę, że problem pojawił się w procesie budowania/kompilowania. Z jakiegoś powodu dodatki do ES6 nie zostały poprawnie zbudowane lub skonfigurowane.

Pliki binarne, według mojego zrozumienia, są już całkowicie i poprawnie zbudowane dla systemu Linux, dlatego też ES6 jest dodawany i poprawnie skonfigurowany.

+2

jakiej wersji węzła używasz? 12.6 wersja binarna w systemie Windows nie działa. – TroyWorks

7

Potrzebujesz nowszej wersji nodejs. Słowo kluczowe class to supported in 4.4.x, ale osobiście widzę, że działa ono w wersji 4.2.6. (Nie do końca pewna, która wersja v8 go wypuściła, co jest najlepszym rozwiązaniem dla wersji węzła).

+0

Miałem zainstalowane dwie wersje węzła. Ran "gdzie węzeł" i zrozumiałem, że używałem niewłaściwego – Hoppe

+1

@Hoppe - Możesz chcieć spojrzeć na nodist. Pozwala ustawić jedną wersję węzła jako globalną wartość domyślną, a inną dla katalogu lokalnego. Mój zespół stwierdził, że jest bardzo pomocny w unikaniu problemów związanych z wersjonowaniem. https://github.com/marcelklehr/nodist – ThatBlairGuy

Powiązane problemy