web-dev-qa-db-ja.com

ES6 + javascriptモジュールのエクスポートオプション

次の両方の方法でES6モジュールのパブリックエクスポートが行われたことを確認しました。

// method 1
export var getAnswer = function () { return 'forty two'; };

// method 2
export default function () { return 'forty two'; };
  1. これらは両方とも有効ですか?
  2. もしそうなら、なぜ両方が存在するのですか?
  3. ES6構文を使用したモジュールエクスポートに有効な他のオプションはありますか?

Googlefuで答えを見つけることができなかったことに驚いています。心配ですのみ ES6モジュール、not CommonJS、RequireJS、AMD、Nodeなど.

80
kdbanman

1年後、そしてこの件に関して私が見つけた最高の情報がここにあります。

エクスポートには4つのタイプがあります。以下に、それぞれの使用例と、それらを使用するインポートを示します。

エクスポート構文

// default exports
export default 42;
export default {};
export default [];
export default (1 + 2);
export default foo;
export default function () {}
export default class {}
export default function foo () {}
export default class foo {}

// variables exports
export var foo = 1;
export var foo = function () {};
export var bar;
export let foo = 2;
export let bar;
export const foo = 3;
export function foo () {}
export class foo {}

// named exports
export {};
export {foo};
export {foo, bar};
export {foo as bar};
export {foo as default};
export {foo as default, bar};

// exports from
export * from "foo";
export {} from "foo";
export {foo} from "foo";
export {foo, bar} from "foo";
export {foo as bar} from "foo";
export {foo as default} from "foo";
export {foo as default, bar} from "foo";
export {default} from "foo";
export {default as foo} from "foo";

インポート構文

// default imports
import foo from "foo";
import {default as foo} from "foo";

// named imports
import {} from "foo";
import {bar} from "foo";
import {bar, baz} from "foo";
import {bar as baz} from "foo";
import {bar as baz, xyz} from "foo";

// glob imports
import * as foo from "foo";

// mixing imports
import foo, {baz as xyz} from "foo";
import foo, * as bar from "foo";

// just import
import "foo";

ソース

173
kdbanman

これらは両方とも有効です。

方法1は、名前付きエクスポートを提供します。ここで重要なのは、複数のものをエクスポートできることです。これは、複数のプロパティを持つオブジェクトをエクスポートする代わりに使用する必要があります。名前付きエクスポートでモジュールをインポートするときは、import {a, b} from cを使用します。

方法2は、デフォルトのエクスポートを提供します。デフォルトのエクスポートは1つだけです。これは主に、class、または追加サポートなしで使用されると予想される単一のfunctionなど、単一のものをエクスポートする場合に使用されます。デフォルトのエクスポートでモジュールをインポートするときは、import d from cを使用します。

両方を使用できることに注意してください!そのため、時々使用するヘルパーをいくつか使用する主要なプライマリ関数がある場合は、exportヘルパーとexport defaultプライマリを使用できます。モジュールをインポートし、両方の種類のエクスポートが必要な場合は、import d, {a, b} from cを使用します。

もう1つのオプションは、モジュールの最後にリストすることで、名前付きエクスポートを取得できることです:export {a,b,c}。名前をexport {a as $a, b as c}に変更することもできます。

このすべてを この記事 から取得しました。これは、私が見つけた最新のes6モジュール情報の最適なソースです。

39
Sean McMillan
  1. これらは両方とも有効ですか?

いいえ、export function () { return answer; };は無効です。デフォルトを使用するか、その関数宣言に名前を追加します。

  1. もしそうなら、なぜ両方が存在するのですか?

彼らはしません:)

  1. ES6構文を使用したモジュールエクスポートに有効な他のオプションはありますか?

ここで多くの有効なオプションを見ることができます: https://github.com/eslint/espree/pull/4

3
caridy