Оказалось, что ответ был довольно прост, давайте рассмотрим наш пример гипотетически, где вы хотите, чтобы каждая категория была разбита по типу животных, но вы хотите, чтобы был установлен только один пакет.
> super-cool-animals
> snakes
anaconda.js
boa.js
package.json
index.js
> birds
hawk.js
pigeon.js
package.json
index.js
package.json
readme.md
index.js
каждый индексный файл простовыполняет экспорт файлов или функций, представляющих интерес на этом уровне
index.js
import * as Birds from './birds'
import * as Snakes from './snakes'
export { Birds, Snakes}
snakes / index.js
export * from './anaconda.js'
export * from './boa.js'
birds / index.js
export * from './hawk.js'
export * from './pigeon.js'
Теперь перейдем к файлам package.json : файл пакета верхнего уровня описывает любойзависимости, автор, имя библиотеки, которая будет использоваться при импорте и т. д. Файлы, специфичные для животного - package.json , просто описывают имя импортируемой библиотеки.
package.json
{
"name": "super-cool-animals",
"version": "1.0.0",
"description": "Super cool animal library",
"main": "index.js",
"author": "Kevin Quinn <glorifundel@gmail.com>",
"license": "MIT",
"dependencies": {},
"peerDependencies": {},
"devDependencies": {}
}
Файлы пакетов, найденные на нижнем уровне (папка «Птицы и змеи»), просто описывают доступный относительный путь.
snakes / package.json
{
"name": "super-cool-animals/snakes",
"main": "index.js"
}
birds / package.json
{
"name": "super-cool-animals/birds",
"main": "index.js"
}
WiТеперь, когда все это определено, вы можете установить пакет npm, и клиент может красиво определить их импорт:
import { Hawk } from 'super-cool-animals/birds';
const SomeBird = Hawk();
Не уверен, что это лучшее решение, но, похоже, оно работает для меня, я надеюсьэто полезно для кого-то, и если есть лучшее или более чистое решение, пожалуйста, опубликуйте его, и я буду рад принять лучший ответ или обновить свой собственный ответ.