12

TS の再エクスポートで少し迷っています。テスト モジュールのペアを作成するとします。

test1.ts;

export function test1() {
    return 'test';
}

test2.ts;

export function test2() {
    return 'test';
}

このようなことができるはずだと思います。

組み合わせた.ts;

export * from './test1';
export * from './test2';

module.exports = {
    test1: test1,
    test2: test2
};

しかし、そのような幸運はありません。古いハックを使用するなど、これに対するさまざまなアプローチについて議論している GitHub の問題がたくさんあるようですexport import * from './test1'が、それらはすべて ES6 仕様が実際に何を意味するのかを議論しているようで、実際に機能するものはありません..

このようなロールアップを行う正しい方法は何ですか? モジュールを複数のファイルに分割するために間違ったパスをたどっているだけですか? ここでは名前空間の方が適切ですか?

4

2 に答える 2

29

module.exportsES モジュールを使用しているときは使用しないでください。module.exportsは CommonJS モジュールの一部であり、EcmaScript モジュールの一部ではありません。

ロールアップ、直接エクスポート

正しいロールアップ モジュールは次のようになります。

export * from './test1';
export * from './test2';

次に、ロールアップを使用します。

import * as rollup from './combined';
// or `import { test1, test2 } from './combined'`;
// or any other valid import

rollup.test1();
rollup.test2();

ロールアップ、ネームスペース オブジェクトの追加

名前空間を追加して test1 と test2 をエクスポートする場合は、次のexport {}構文を使用します。

import * as test1 from './test1';
import * as test2 from './test2';
export { test1, test2 };

次に、使用法は次のようになります。

import * as rollup from './combined';
rollup.test1.test1();
rollup.test2.test2();

異なるエクスポート名を使用したロールアップ

asのように、名前の競合がある場合は、を使用して名前をリダイレクトすることもできimportます。

export { test1 as t1 } from './test1';
export { test2 as t2 } from './test2';

次に、使用法は次のようになります。

import * as rollup from './combined';
rollup.t1();
rollup.t2();
于 2016-01-01T20:36:56.283 に答える