импорт разных вложенных пакетов в модуль npm - PullRequest
0 голосов
/ 27 февраля 2019

Скажем, у меня есть структура библиотеки, как показано ниже:

my-library
|-- lib
|   |
|   |-- foo
|   |   |--index.js
|   |
|   |-- bar
|       |--index.js
|
|---src
|   |-- foo
|       |-- button.js
|       |-- index.js
|   |-- bar
|       |-- button.js
|       |-- index.js
|-- package.json

Я хочу импортировать эти пакеты следующим образом:

import { button } from 'my-library/foo'
import { button } from 'my-library/bar'

Возможно ли это?

Единственный способ заставить его работать, это импортировать его так:

import { Button } from 'my-library/lib/foo'

Я использую Babel, если это поможет.Должен ли я просто перенести в корневой каталог и не использовать lib dir?

Я смотрю на пакеты, которые делают это, такие как lodash и React Native Vector Icons где они указывают, что они импортируют.

Аналогичный вопрос здесь: Корневой каталог в package.json

1 Ответ

0 голосов
/ 29 августа 2019

Модули ECMAScript (ES-модули) поддерживают экспериментальное свойство в package.json , называемое exports , которое допускает псевдонимы подмодулей.

УчитываяФайл package.json с этой конфигурацией:

{
  "name": "my-library",
  "exports": {
    "./foo/": "./lib/foo/",
    "./bar/": "./lib/bar/"
  }
}

Вы сможете импортировать такие модули, как:

import { button } from 'my-library/foo'
import { button } from 'my-library/bar'

Другой вариант - обновить скрипт сборки:

  • копирование ./my-library/package.json в ./my-library/lib/package.json
  • обновление поля main при необходимости
  • публикация из каталога ./my-library/lib

Что касается обновления поля main, вы можете рассмотреть возможность добавления файла ./my-library/lib/index.js, который экспортирует каждый модуль из вашей библиотеки для потребителей, которые хотят импортировать по фиксированному пути (однако в среде браузера это может увеличитьих размер пучка):

import { button } from 'my-library'
...