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


80

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

「インポート」なしの作業コード:

'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);

「インポート」で機能しないコード:

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;
  }
}

また、http: //node.green/をチェックして、サポートされているes6を確認しましたが、-harmony_modulesオプションで機能しない理由を理解できませんでした。助けてください。


Webpackを一緒に使用するBabelローダー
Naramsim 2016

2
あなたはV6でバベルまたはWebPACKの必要はありません
chovy



ノードにES6を実装する際の課題について説明している2016年9月のこのブログ投稿も参照してくださいimport。ES6モジュールがノードに出荷されるまでにはまだ長い道のりがあるようです。
jakub.g 2016年

回答:


87

それらはまだ実装されていません。

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

node --v8-options | grep harmony 

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

((テストに値するハーモニー機能を有効--es_staging内部使用のみ))
--harmony(完了したすべての調和機能を有効にする)
(すべての出荷のハーモニー機能を有効にする)--harmony_shipping
--harmony_object_observe(「調和Object.observeを」(有効でprogress))-
harmony_modules(enable "harmony modules"(in progress))-
harmony_function_sent(enable "harmony function.sent"(in progress))-
harmony_sharedarraybuffer(enable "harmony sharedarraybuffer"(in progress))-
harmony_simd (「ハーモニーsimd」を有効にする(進行中))
--harmony_do_expressionsは(「調和行う-表現」(有効進行中の))
(「ハーモニーイテレータファイナライズ」(有効--harmony_iterator_close進行中の))
--harmony_tailcalls(「ハーモニー末尾再帰」(有効進行中の))
--harmony_object_values_entries( enable "harmony Object.values / Object.entries"(進行中))-
harmony_object_own_property_descriptors(enable "harmony Object.getOwnPropertyDescriptors()"(進行中))-
harmony_regexp_property(enable "harmony unicode regexp property classes"(進行中) )
-harmony_function_name(enable "ハーモニー関数名の推論」)
--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 destructuringassignment")-
harmony_destructuring_bind( "harmony destructuring bind"を
有効にする)-harmony_tostring( "harmony toString"を
有効にする)-harmony_regexps( "harmony正規表現拡張"を
有効にする)-harmony_unicode_regexps( "harmony unicode regexps"を有効にする)
--harmony_sloppy(「ずさんなモードのハーモニー機能」を有効にする)
-harmony_sloppy_let(「ハーモニーレットをずさんなモードで」を有効にする)
--harmony_sloppy_function( "harmony sloppy function block
scoping "を有効にする)-harmony_proxies( "harmony
proxies"を有効にする)-harmony_reflect( "harmony Reflect API"を
有効にする)-harmony_regexp_subclass( "harmony regexp subclassing"を有効にする)


13
ありがとう。私はそれを見ましたが、「インポート」はes6の重要な構文の1つであるため、自分自身を信じていませんでした
喜び

1
@joyええ、うまくいけばすぐに利用可能になります。
ポール

4
@KingWuにnode --v8-options | grep harmony更新しnode 6.0.0た後、実行して見つけました。
ポール

1
ノード6がリリースされたと聞いてとてもうれしかったのですが、今では最も重要な機能の1つが実装されていませんでした... :(
Kokodoko 2016

1
@SuperUberDuperノード7を使用
Ali Gajani 2017

40

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

以下のためのWindowsユーザー同等のコマンドは次のようになります。

node --v8-options | findstr harmony

32

モジュールが実装されるまで、Babelの「トランスパイラー」を使用てコードを実行できます。

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/を参照してください

欠点:これには、コンパイル時間が長くなるなど、さまざまな欠点があります。これは重大な場合があり、デバッグ用のソースマップが必要になります。ただ言って。


16

上で述べたように、ES6モジュールはまだ実装されていません。

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

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

また、次のように、package.json内のES6モジュールですべてのファイルを宣言する代替アプローチを提示する反対提案があります。

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

1
これが重要なポイントだと思います。「ThePowersThat Be」はまだ仕様について議論しているので、ノードに到達する前にv8に表示される必要があります。
Paul Everitt 2016

1
注:最新のドラフトは.mjs拡張機能として必要ありません。これは互換性のためにはるかに優れています。
マシューディーン

質問は:ダウンロードするこれらのes6モジュールはどこにありますか?
マークブリロー2017年

このブログ投稿は、始めるのに良い場所かもしれません。
РоманПарадеев
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.