Подтвердить что ты не робот

Node.js/ES6/class creation: SyntaxError: Неожиданное зарезервированное слово

Я пытаюсь создать класс в своем node.js/express приложении.

Он работает в основном режиме js/prototype, например:

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

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

module.exports = MyClass;

Но я хочу использовать ключевые слова class, constructor, extends,....

Я попробовал:

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

    myMethod() {
        /* method code */
    }

}

Но это не работает, ошибка:

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

Моя командная строка для запуска приложения со всеми параметрами гармонии:

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

Идея правильно запустить приложение?

4b9b3361

Ответ 1

Вы можете сделать это с помощью io.js

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

Или на node.js с traceur

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

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

Обязательно проверьте новые функции перед их использованием, некоторые из них не поддерживаются. Изменить: вы можете проверить список совместимости из здесь

Ответ 2

Вам нужна более новая версия nodejs. Ключевое слово class поддерживается в 4.4.x, но я лично вижу, что он работает в v4.2.6. (Не совсем уверен, какая версия v8 выпустила его, что и скажет версия node.)

Ответ 3

У меня была эта проблема.

Это вызвано тем, что я загрузил исходный код nodejs, чем встроенный/скомпилированный на моем Ubuntu. ./configure, затем make и make install.

По какой-то причине зарезервированные слова ES6, такие как class и extends, бросали SyntaxError: Неожиданное зарезервированное слово даже при использовании флага --harmony.

Было решено, что я загружаю двоичные файлы nodejs для linux (https://nodejs.org/download/).

Теперь класс и расширяет работу даже без флага --harmony.

Я считаю, что проблема возникла из моего процесса сборки/компиляции. По некоторым причинам дополнения ES6 не были построены или настроены должным образом.

Двоичные файлы, насколько я понимаю, полностью и корректно построены для Linux, и поэтому ES6 добавлен и настроен правильно.