Я публикую библиотеку для NPM. Библиотека была написана на Typescript, а результат компиляции Typescript помещен в папку lib/
. Основной файл - index.ts
, который экспортирует мой publi c API:
export * from './functions';
export * from './models';
В пакете. 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
потребитель импортирует все из пакета root:
import {someFunction, SomeModel} from 'a-library';
Это работает, но мне нравится идея разделения путей. Один путь для функций, а другой для моделей. В настоящее время, если я удаляю индекс верхнего уровня, импорт становится сегрегированным, но теперь он включает папку lib/
в путь, который мне не нужен:
import {someFunction} from 'a-library/lib/functions';
import {SomeModel} from 'a-library/lib/models';
Что я действительно хотел бы выполнить sh то же самое, но без lib/
. У меня есть рабочее решение, но оно кажется слишком запутанным. Вот что работает:
- В пакете. json, удалите ключи
main
types
и files
. - Удалите или очистите
index.ts
- Для публикации sh замените простой
npm publish
на следующие шаги: - скопируйте пакет. json и вставьте его в
/lib
папку - cd в
/lib
папку и запустите npm pack
и запомните имя созданного тарбола - запустите
npm publish {{TARBALL_NAME}}
- cd обратно в проект root
В результате опубликованный пакет после установки имеет следующую структуру папок:
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';
Проблема заключается в том, что упаковка и публикация в соответствии с sh кажутся слишком громоздкими. Я никогда не заставлю своих товарищей по команде пройти процесс из 3 или 4 шагов, когда они только что запускали npm publish
все это время.
Есть ли более простой способ сделать sh то, что я хочу?