web-dev-qa-db-ja.com

エクスポートという名前のJavaScript ES6で...構文を使用

ライブラリ内のすべての名前付きエクスポートを知らなくても、ライブラリからすべてをハッシュとしてインポートし、それを変更して、変更されたハッシュを再エクスポートしようとしています。例えば:

import * as reactBootstrap from 'react-bootstrap';

wrappedReactBootstrap = doFunnyThingsTo(reactBootstrap);

export {
  ...wrappedReactBootstrap
};

// or
export wrappedReactBootstrap;

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export についての私の理解は、以下は仕様で許可されていないということです。誰かが確認できますか?

言うまでもなく、exportステートメントとimportステートメントは最上位でなければならないため、ループは問題外です。

19
Robert Balicki

オブジェクトレストスプレッドは ステージ3の提案 であり、仕様の一部ではありません(ES2018に含まれる可能性があります)。

さらに重要なことに、exportには既存のJS構文を模倣する構文がありますが、{ ... }を式として解釈しません。 export構文は厳密に定義されました ES2015モジュールは静的に分析されることになっているためです。これは利点の1つですが、開発者はエクスポートとインポートを明示的に指定する必要があります。

{ ...wrappedReactBootstrap }は動的エクスポートを導入しているため(この目的のためにここで使用されました)、ES2015モジュールexportではサポートされておらず、サポートされる可能性はほとんどありません。

エクスポートに動的な動作を提供する必要がある場合は、名前付きまたはデフォルトのオブジェクトとしてエクスポートおよびインポートできます。

import * as reactBootstrap from 'react-bootstrap';

export default doFunnyThingsTo(reactBootstrap);

そして、

import wrappedReactBootstrap from '...';

const { funny, thing } = wrappedReactBootstrap;

当然のことながら、wrappedReactBootstrapオブジェクトはこの方法でES2015モジュールのメリットを得られません。木の揺れ。

22
Estus Flask