Определения пути экспорта пакета npm - PullRequest
3 голосов
/ 08 марта 2019

Я создаю свой первый набор пакетов npm для поддержки реактивной среды.Я пытаюсь настроить пакеты таким образом, чтобы содержимое было организовано внутренне и могло быть легко различено с помощью операторов импорта на стороне клиента.

Учитывая 4 определения функций, определенных в моем пакете npm (имя пакета: супер-cool-animals):

snakes.ts

export function Boa() {}
export function Anaconda() {}

birds.ts

export function Pigeon() {}
export function Hawk() {}

Я быкак потребитель библиотеки, чтобы иметь возможность установить библиотеку:

npm install --save super-cool-animals

И затем импортировать их так:

import { Boa, Anaconda } from 'super-cool-animals/snakes'
import { Pigeon, Hawk } from 'super-cool-animals/birds'

Pigeon();  // direct access to the function!

Мне трудно определить правильный механизмчтобы достичь этого, и я считаю, что я видел этот механизм в некоторых средах (например, угловых)

Я видел несколько предложений, позволяющих вам объединить их в одну переменную, например, с помощью index.ts файлы:

snakes / index.ts

export * from './snakes.ts'

birds / index.ts

export * from './birds.ts

. / Index.ts

import * as Birds from './birds'
import * as Snakes from './snakes'
export { Birds, Snakes}

Но это имеет ужасный конечный результат, теперь вам нужноДля получения доступа к функции укажите контейнер:

Потребитель библиотеки:

import { Birds } from 'super-cool-animals';

Birds.Pigeon();

Любая помощь приветствуется.Спасибо.

1 Ответ

2 голосов
/ 09 марта 2019

Оказалось, что ответ был довольно прост, давайте рассмотрим наш пример гипотетически, где вы хотите, чтобы каждая категория была разбита по типу животных, но вы хотите, чтобы был установлен только один пакет.

> 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();

Не уверен, что это лучшее решение, но, похоже, оно работает для меня, я надеюсьэто полезно для кого-то, и если есть лучшее или более чистое решение, пожалуйста, опубликуйте его, и я буду рад принять лучший ответ или обновить свой собственный ответ.

...