web-dev-qa-db-ja.com

node.js / ES6 /クラスの作成:SyntaxError:予期しない予約語

Node.js/expressアプリでクラスを作成しようとしています。

次のような基本的なjs /プロトタイプモードで動作します。

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

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

module.exports = MyClass;

しかし、クラス、コンストラクター、拡張、...キーワードを使用したいと思います。

私はそれを試しました:

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 

アプリを正しく起動するためのアイデアを教えてください。

15
ceadreak

io.js でこれを行うことができます

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

または traceur を使用してnode.jsで

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

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

新しい機能を使用する前に必ずテストしてください。一部はサポートされていません。編集: ここ から互換性リストを確認できます

7
SerkanSerttop

Nodejsの新しいバージョンが必要です。 classキーワードは 4.4.xでサポート ですが、個人的にはv4.2.6で動作するようです。 (v8のどのバージョンがそれをリリースしたかは完全にはわかりません。これはノードのバージョンを伝えるものです。)

7
ThatBlairGuy

私はこの問題を抱えていました。

Ubuntuでビルド/コンパイルするよりもnodejsのソースコードをダウンロードしたために発生しました。 ./configure、次にmakeおよびmake install

何らかの理由で、classextendsなどのES6予約語が、--harmonyフラグを使用していても、SyntaxError:Unexpected reserved Wordをスローしていました。

Linuxのnodejsバイナリをダウンロードすることで解決しました( https://nodejs.org/download/ )。

--harmonyフラグがなくても、クラスと拡張機能が機能するようになりました。

問題は私のビルド/コンパイルプロセスから生じたと思います。何らかの理由で、ES6の追加が正しく構築または構成されていません。

私の理解では、バイナリは完全にLinux用に正しく構築されているため、ES6が正しく追加および設定されています。

4
l__flex__l