Как опубликовать NPM, чтобы потребители могли импортировать из разных каталогов верхнего уровня
Я публикую библиотеку для NPM. Библиотека написана на Typescript, и результат компиляции Typescript помещается вlib/
папка. Главный файл - этоindex.ts
который экспортирует мой общедоступный API:
export * from './functions';
export * from './models';
В package.json я указываю:
{"main": "lib/index.js", "types": "lib/index.d.ts", "files": ["lib/**/*"]}
Как только мой пакет будет опубликован и установлен в другом месте, его структура папок будет следующей:
lib/
index.js
index.d.ts
functions/
index.ts
my-function.ts
models/
index.ts
my-model.ts
потребитель импортирует все из корня пакета:
import {someFunction, SomeModel} from 'a-library';
Это работает, но мне нравится идея разделения путей. Один путь для функций, а другой для моделей. В настоящее время, если я удалю индекс верхнего уровня, импорт станет сегрегированным, но теперь они включаютlib/
папка по пути, который мне не нужен:
import {someFunction} from 'a-library/lib/functions';
import {SomeModel} from 'a-library/lib/models';
На самом деле я хотел бы сделать то же самое, но без lib/
. У меня есть рабочее решение, но оно кажется слишком запутанным. Вот что работает:
- В package.json удалите
main
types
а такжеfiles
ключ. - Удалить или очистить
index.ts
- Для публикации замените простой
npm publish
со следующими шагами:- скопируйте package.json и вставьте его в
/lib
папка - компакт-диск в
/lib
папку и запуститьnpm pack
и обратите внимание на имя созданного архива - пробег
npm publish {{TARBALL_NAME}}
- cd резервное копирование в корень проекта
- скопируйте package.json и вставьте его в
В результате после установки опубликованный пакет имеет следующую структуру папок:
functions/
index.ts
my-function.ts
models/
index.ts
my-model.ts
Потому что вещи больше не вложены в lib/
каталог, который потребитель может импортировать по своему желанию:
import {someFunction} from 'a-library/functions';
import {SomeModel} from 'a-library/models';
Проблема в том, что упаковка и публикация для этого кажутся слишком громоздкими. Я никогда не заставлю своих товарищей по команде пройти процесс из 3 или 4 шагов, когда они только что бегали.npm publish
все это время.
Есть ли более простой способ добиться того, что мне нужно?