2016-08-13 11 views
0

私が正しく再利用可能なcommonjsライブラリ(NPMパッケージ)を開発するためにいくつかのガイダンスを必要としています。Commonjsライブラリのindex.ts外部モジュールとして

—lib 
——Helper.ts 
——Serialization.ts 
——meta 
——— Entity.ts 
—index.ts 

などなど: は、ライブラリの構造は以下であると言うことができます。各ファイルは外部モジュールです。

ここでは、ライブラリの機能を公開し、エントリポイントとして機能するエントリファイル(index.tsなど)を作成する必要があります。 ここで私は、それを作成する方法のまわりで私の頭をラップすることはできません。

export * from './lib/Helper’; 
export * from './lib/Serialization’; 
export * from './lib/meta/Entity’; 
… 

原因これは論理グループを削除しますし、可能な名前に将来のリードが

を競合に私もインデックスを持つようにしようとしていることができます:私はすべてをエクスポートすることによって、それを平坦化することなく、ネストされた構造を維持したいと思います。

import {Helper} from './lib/Helper'; 
import * as Serialization from './lib/Serialization'; 
import * as Decorators from './lib/meta/Decorators'; 

let core = { 
    Helper: Helper, 
    Serialization: Serialization, 
    Meta: { 
     Entity: Entity, 
    } 
} 

export default core; 

私はこのようなインポートのタイプを消費するために来るまで、それは完璧に動作します:

import Core from ’nameOfTheNpmPackage'; 

let Entity = Core.Meta.Entity; 

function f(e: Entity)//<—This produce error cannot find name ‘Entity' 
{ 

} 
このようなTS彼らは型宣言空間ではないとして

(彼らは名前空間に含まれていない場合はそこにそれらをコピーする方法はありますか?)

私は全体のライブラリによってのための単一d.tsファイルを生成しているしようとした別のオプションoutFile + amdを使用します。しかし、そのファイルは外部モジュールではありません。

私の質問は - どのように外部モジュールとライブラリに公開されているすべての機能をエクスポートするようにindex.tsを書くことが可能です。

ありがとうございます。無駄な時間の

答えて

2

ある日、私は醜いソリューションを作ってみました。あなたは各「レベル」内の集計と同じ「レベル」のすべての機能を再輸出することを、自身のindex.tsを置く必要があり、エクスポートcommonjsライブラリの入れ子構造を維持するために 。

ルートindex.ts

—lib ——Helper.ts ——Serialization.ts ——meta ——— index.ts ——— Entity.ts —index.ts

export * from './lib/Helper'; 
export * from './lib/Serialization'; 

import * as S from './lib/Serialization'; //This is case where one file contains several exported classes that we want to keen as separate module 
export {S as Serialization}; 

import * as Meta from './lib/meta/index'; 
export {Meta}; 

とメタ/ index.ts:

export * from './Entity'; 

は、私は本当に喜んでいるだろう、私のサンプルでは、​​それは次のようになります上この共通の(?)タスクが「レベル」ごとに余分なファイルなしで解決できるかどうかを知ることができます。

関連する問題