Index.ts библиотеки Commonjs как внешний модуль

Мне нужно руководство, чтобы правильно разработать многоразовую библиотеку commonjs (пакет npm). Допустим, структура библиотеки следующая:

—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’;
…

Потому что это приведет к удалению логической группировки и может в будущем привести к возможным конфликтам имен.

Я также пробовал иметь index.ts вот так:

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'
{

}

Поскольку они не находятся в пространстве объявления типа (есть ли способ скопировать их туда, если они не находятся в пространстве имен?)

Другой вариант, который я пробовал, - это создание одного файла d.ts для всей библиотеки с помощью outFile + amd. Но этот файл не является внешним модулем.

Итак, у меня вопрос - как можно написать index.ts, чтобы он был внешним модулем и экспортировал все функции, предоставляемые библиотекой.

Заранее спасибо.


person Amid    schedule 13.08.2016    source источник


Ответы (1)


Один день потраченного впустую времени, и я придумал уродливое решение. Чтобы сохранить вложенную структуру экспортируемой библиотеки commonjs, вы должны внутри каждого «уровня» поместить свой собственный index.ts, который будет агрегировать и повторно экспортировать все функции одного и того же «уровня». Для моего примера выше это будет выглядеть так:

—lib ——Helper.ts ——Serialization.ts ——meta ——— index.ts ——— Entity.ts —index.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};

И meta / index.ts:

export * from './Entity';

Я был бы очень рад узнать, можно ли решить эту распространенную (?) Задачу без дополнительных файлов на «уровень».

person Amid    schedule 14.08.2016