Как модуль.экспортировать как функцию, так и другие символы - PullRequest
0 голосов
/ 29 ноября 2018

Я хочу создать плагин newman в виде пакета npm, а также использовать этот пакет в качестве библиотеки.У меня есть файл src / index.ts, который должен иметь этот экспорт для запуска

// in package newman-reporter-custom/index.ts
module.exports = function(newmanEventEmitter: any, reporterOptions: any, collectionRunOptions: any) {
    ...
};

У меня также есть этот бит в моем package.json: "main": "lib/index.js", и "outDir": "lib", в моем tsconfig.json.

Также я хочу экспортировать некоторые другие классы для использования того же пакета, что и библиотеки.

// in package newman-reporter-custom/index.ts
import { foo } from "./foo";
export { foo };

Я также хочу экспортировать другие символы из этого index.ts, так что мне может потребоватьсяпроект в виде библиотеки, такой как

// other npm package index.ts
import { foo } from "newman-reporter-custom";

Однако, кажется, что в newman-reporter-custom / index.ts я могу сделать только один из обоих, либо module.exports = function(...),, либо export { foo };.

Если я попытаюсь либо в отдельности, то все будет работать нормально.

Если я попытаюсь сделать и то, и другое (по-разному), либо новичок не сможет загрузить мой пакет, говоря что-то вроде TypeError: Reporter is not a constructor,или я не могу импортировать пакет как библиотеку с ошибками типа TypeError: Class extends value undefined is not a function or null.

Мне кажется, что module.exports может быть либо функцией (конструктором), либо набором символов, но не обоими.

Итак, как же работает чистый способ как удовлетворить новичка, так и обеспечить экспорт функциит, а также экспорт других символов?Я гибок в том, как мне требуется одна посылка из другой.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Решение с использованием отдельного модуля API

Я попытался использовать другой модуль, скажем, src / public.ts, который имеет

// in package newman-reporter-custom/public.ts
import { foo } from "./foo";
export { foo };

А затем в зависимых пакетах

// other npm package index.ts
import { foo } from "newman-reporter-custom/dist/public";

Это решение выглядит немного некрасиво из-за части /dist.(Кажется, обсуждается здесь https://github.com/nodejs/node/issues/14970)

0 голосов
/ 29 ноября 2018

TypeScript может преобразовать стандартный синтаксис модуля ECMAScript в любой вариант, который вам нравится, поэтому вот пример модуля TypeScript, который экспортирует импортированный элемент:

example.ts

import { example } from './module';

// Export a function
export function foo() {
    return 2;
}

// Export an imported member
export { example };

И ваш код вызова знает только о модуле примера:

import { foo, example } from './example';
...