2016-08-13 9 views
0

Ich brauche eine Anleitung, um wiederverwendbare commonjs-Bibliothek (npm-Paket) richtig zu entwickeln. Lets sagen, dass die Bibliotheksstruktur ist die folgende:Commonjs-Bibliothek index.ts als externes Modul

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

Und so weiter. Jede Datei ist ein externes Modul.

Jetzt muss ich Eintragsdatei erstellen (sagen Index.ts), die Funktionalität der Bibliothek verfügbar machen und als Einstiegspunkt dienen wird. Hier kann ich meinen Kopf nicht um den Weg wickeln, um es zu schaffen. Ich mag die verschachtelte Struktur halten, ohne es durch den Export alles Abflachen:

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

Ursache wird diese logische Gruppierung entfernen und zu möglichen Namen in der Zukunft führen kann Konflikte

Ich habe auch versucht, Index zu haben. ts wie folgt aus:

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; 

Es funktioniert perfekt, bis ich komme, um importierte Arten wie diese zu verbrauchen:

import Core from ’nameOfTheNpmPackage'; 

let Entity = Core.Meta.Entity; 

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

} 

Da sie nicht in der Typdeklaration Raum sind (gibt es einen Weg, um sie dort zu kopieren, wenn sie nicht im Namensraum sind?)

Eine weitere Option, die ich versucht habe ist Single d.ts Datei für die gesamte Bibliothek zu erzeugen, indem mit outFile + amd. Diese Datei ist jedoch kein externes Modul.

Also meine Frage ist - wie ist es möglich, index.ts zu schreiben, so dass es externes Modul sein wird und alle Funktionalität von Bibliothek freigelegt exportieren.

Vielen Dank im Voraus.

Antwort

2

Ein Tag verschwendete Zeit und ich habe eine hässliche Lösung gefunden. Um die verschachtelte Struktur der exportierten commonjs-Bibliothek beizubehalten, müssen Sie innerhalb jeder 'Ebene' ihre eigene index.ts setzen, die alle Funktionen derselben 'Ebene' aggregiert und erneut exportiert. Für meine Probe oben wird es wie folgt aussehen:

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

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

Und meta/index.ts:

export * from './Entity'; 

würde ich wirklich gerne zu wissen, ob diese gemeinsame (?) Aufgabe ohne zusätzliche Dateien pro 'Level' gelöst werden kann.

Verwandte Themen