Как NPM publi sh, чтобы потребители могли импортировать из разных каталогов верхнего уровня - PullRequest
2 голосов
/ 24 февраля 2020

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

  1. В пакете. json, удалите ключи main types и files.
  2. Удалите или очистите index.ts
  3. Для публикации 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 то, что я хочу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...