Typescript - преобразование импорта для распределения npm - PullRequest
0 голосов
/ 25 июня 2018

Я работаю над пакетом NPM, написанным на Typescript, и у меня возникают проблемы с компоновкой разрешения модуля при компиляции библиотеки для публикации.

На протяжении всего проекта я использовал не относительный импорт, чтобы избежать раздражения ../../../. Однако я прочитал в документации по машинописи, что относительный импорт должен использоваться внутри проекта.

Относительный импорт разрешен относительно импортируемого файла и не может быть преобразован в объявление окружающего модуля. Вы должны использовать относительный импорт для своих собственных модулей, которые гарантированно сохраняют свое относительное местоположение во время выполнения.

Не относительный импорт может быть разрешен относительно baseUrl или путем сопоставления путей, о котором мы расскажем ниже. Они также могут разрешать объявления окружающих модулей. Используйте не относительные пути при импорте любых ваших внешних зависимостей.

Мне бы не хотелось жертвовать красивым, аккуратным импортом в пользу относительного импорта, но я не уверен, как настроить параметры компилятора, чтобы заставить это работать. При запуске тестов я указываю NODE_PATH для разрешения модулей, но это не работает для посткомпиляции.

Я хотел бы иметь возможность записывать файлы, используя не относительный импорт, но каким-то образом преобразовать их, чтобы файлы dist/ могли разрешить импорт.

Проект размещен на github здесь .

Соответствующая проблема заключается в том, что в моей папке dist/ появляется файл index.d.ts, который выглядит так:

import { Emitter } from 'emitter';
import { Schema } from 'migrations';
import { Model, model, relation } from 'model';
import { Builder } from 'query';

export { Builder, Emitter, Model, model, relation, Schema };

Но все модули имеют ошибки, которые не могут быть устранены. Как я могу сохранить эти импорта в их текущей форме, но преобразовать их каким-либо образом при сборке, чтобы при публикации пакета npm модули могли быть правильно разрешены.

1 Ответ

0 голосов
/ 25 июня 2018

Я бы следовал советам в официальных документах Typescript:

https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

По сути, советуем создать вашу библиотеку непосредственно перед публикацией в npm. У вас будет два файла на выходе; давайте назовем их main.js и main.d.ts.

Критическим моментом здесь является то, что, перебирая исходные файлы, вы разрешаете зависимости до того, как npm будет задействован вообще, поэтому вы можете хранить ваши ссылки по своему усмотрению.

В вашем package.json включите две строки (или измените их соответственно, если они у вас уже есть):

{
    ...
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
    ...
}

Таким образом, любому потребляющему проекту не нужно знать о внутренностях вашей библиотеки: они могут просто использовать скомпилированный вывод, ссылаясь на сгенерированный файл типизаций.

...