Как опубликовать 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/. У меня есть рабочее решение, но оно кажется слишком запутанным. Вот что работает:

  1. В package.json удалите main types а также files ключ.
  2. Удалить или очистить index.ts
  3. Для публикации замените простой npm publish со следующими шагами:
    • скопируйте package.json и вставьте его в /lib папка
    • компакт-диск в /lib папку и запустить npm pack и обратите внимание на имя созданного архива
    • пробег npm publish {{TARBALL_NAME}}
    • cd резервное копирование в корень проекта

В результате после установки опубликованный пакет имеет следующую структуру папок:

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 все это время.

Есть ли более простой способ добиться того, что мне нужно?

0 ответов

Другие вопросы по тегам