web-dev-qa-db-ja.com

--harmony_modulesオプションを指定した場合、ES2015「インポート」がノードv6.0.0で機能しない

私はノードv6.0.0を使用していて、ES2016(ES6)を使用したいと思いました。しかし、私は「インポート」構文が機能していないことに気付きました。 ES2015でモジュラーコードを書くための「インポート」は基本的なものではありませんか? --harmony_modulesオプションを付けてnodeを実行しようとしましたが、それでも「import」について同じエラーが発生しました。これがコードです。

"import"のない作業コード

'use strict';
let sum = 0;
class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}
let numberObj = new Number();
sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

"import"の付いたコードを動かさない:

server.js

'use strict';
import Number from "./Number";

let sum = 0;


let numberObj = new Number();

sum = numberObj.addNumber(1,2);
console.log("sum of two number 1 and 2 "+ sum);

Number.js

'use strict';
export default class Number {

  addNumber(num1, num2) {
    return num1 + num2;
  }
}

サポートされているes6を見るために http://node.green/ もチェックしましたが、なぜ--harmony_modulesオプションが使えないのか理解できませんでした。助けてください。

80
joy

まだ実装されていません。

ノード6.0.0は、ほとんどのES6機能が完成したバージョンのV8を使用します。残念ながら、モジュールはそれらの完成した機能の1つではありません。

node --v8-options | grep harmony 

進行中調和フラグは完全には実装されておらず、通常は機能していません。

--es_staging(テストに適した調和機能を有効にします(内部使用のみ))
- ハーモニー(すべてのハーモニー機能を有効にする)
- harmony_shipping(出荷されているすべてのハーモニー機能を有効にする)
- harmony_object_observe( "harmony Object.observe"を有効にする(進行中))
- harmony_modules( "harmony modules"を有効にします(進行中))
- harmony_function_sent( "harmony function.sent"を有効にします(進行中))
- harmony_sharedarraybuffer( "harmony sharedarraybuffer"を有効にします(進行中))
- harmony_simd( "harmony simd"(進行中)を有効にする)
- harmony_do_expressions( "harmony do-expressions"を有効にします(進行中))
- harmony_iterator_close( "harmony iterator finalization"を有効にする(進行中))
- harmony_tailcalls( "ハーモニーテールコール"を有効にします(進行中))
- harmony_object_values_entries( "harmony Object.values/Object.entries"を有効にします(進行中))
- harmony_object_own_property_descriptors( "harmony Object.getOwnPropertyDescriptors()"(進行中)を有効にする)
- harmony_regexp_property( "harmony unicode regexpプロパティクラス"を有効にする(進行中))
- harmony_function_name( "調和関数名推論"を有効にする)
- harmony_regexp_lookbehind( "harmony regexp lookbehind"を有効にします)
- harmony_species( "harmony Symbol.species"を有効にする)
- harmony_instanceof( "harmony instanceof support"を有効にします)
- harmony_default_parameters( "harmony default parameters"を有効にする)
- harmony_destructuring_assignment( "harmony destructuring assignment"を有効にする)
- harmony_destructuring_bind( "harmony destructuring bind"を有効にする)
- harmony_tostring( "harmony toString"を有効にする)
- harmony_regexps(「調和正規表現拡張」を有効にする)
- harmony_unicode_regexps( "harmony unicode regexps"を有効にする)
- harmony_sloppy( "ずさんなモードでの調和機能"を有効にする)
- harmony_sloppy_let(「ずさんなモードでの調和を可能にする」を有効にする)
- harmony_sloppy_function( "ハーモニーずさんな機能ブロックスコープ"を有効にする)
- harmony_proxies( "ハーモニープロキシ"を有効にする)
- harmony_reflect( "harmony Reflect API"を有効にする)
- harmony_regexp_subclass( "harmony regexpサブクラス化"を有効にする)

87
Paulpro

これは@ Paulproの回答に対するコメントになるはずですが、コメントを投稿するのに十分な担当者がいません。

にとって Windows ユーザーに相当するコマンドは次のとおりです。

node --v8-options | findstr harmony
40
CodeVortex

モジュールが実装されるまでは、コードを実行するために Babel "transpiler" を使うことができます。

npm install --save babel-cli babel-preset-node6
./node_modules/.bin/babel-node --presets node6 ./your_script.js

https://www.npmjs.com/package/babel-preset-node6 および https://babeljs.io/docs/usage/cli/ を参照してください。

デメリット:これには、余分なコンパイル時間など、さまざまなデメリットがあります。ただ言って。

32
wires

前述のように、ES6モジュールはまだ実装されていません。

現在のNode.jsモジュール構文であるCommon JSモジュールと下位互換性があるような方法でES6モジュールを実装することは重要な問題ではないようです。

ただし、 ドラフト の実装があり、ES6モジュールを含むファイルのための新しいファイル拡張子.mjsが導入されています。

また、package.jsonのES6モジュールですべてのファイルを宣言する別のアプローチを示す 反対提案 もあります。

{
    "modules.root": "/path/to/es6/modules"
}