Простые операторы импорта для пакета npm - PullRequest
3 голосов
/ 11 января 2020

Я хочу опубликовать sh новый npm пакет TypeScript и хочу иметь возможность использовать простые операторы импорта (импортировать несколько классов из библиотеки через одну строку) в моем проекте, например:

import { FirstClass, SecondClass } from "my-repo";

В настоящее время мне приходится использовать много более длинных операторов импорта, например:

import { FirstClass} from "my-repo/first-class";
import { SecondClass } from "my-repo/second-class";

Сначала я собрал пакет с tsc -p . для dist, а затем запустил npm publish , Сейчас я экспериментирую с pikapkg / pack , чтобы упростить процесс сборки, однако мне все еще приходится использовать длинные операторы импорта.

Существует ли какой-либо инструмент для автоматического создания пакета с одним файлом для импорта из (index.ts, который помещается как основной в пакете. json) или я должен вручную создать основной index.ts со всеми экспортированными классами, и каждый раз, когда я добавляю новый класс, добавляйте его также в index.ts снова?

1 Ответ

2 голосов
/ 11 января 2020

Для этого есть два подхода.

Установка в node_modules

В этом случае мы хотим установить библиотеку в node_modules Потребитель и использование Node module resolution.

Конфигурация Node module resolution означает, что компилятор TypeScript ищет каталог node_modules в вашей рабочей области, и если в нем есть экспортированный код, который соответствует вашему оператору импорта, тогда он сможет решить это с помощью короткого оператора импорта. Вы можете найти подробности об этом здесь .

Если ваша библиотека опубликована и развернута в реестре (например, https://registry.npmjs.org/ или в хранилище Artifactory et c.) Затем добавьте развернутую библиотеку к package.json потребителя в качестве зависимости и установите ее с помощью npm install. На этом этапе библиотека будет установлена ​​в node_modules, и если в tsconfig.json настроены параметры компилятора Node module resolution, то компилятор TypesSript сможет разрешить краткий оператор импорта.

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

Ссылка на опубликованный источник напрямую из dist

В tsconfig.json пользовательского проекта вы можете указать свои локально опубликованные модули в paths из compilerOptions настройки (см. Подробнее опции компилятора ). Таким образом, компилятор TypeScript также разрешит зависимости от настроенных путей. Следовательно, вам не нужно устанавливать вашу зависимость в node_modules, чтобы использовать короткий оператор импорта, компилятор найдет их по настроенным путям.

Допустим, у меня есть библиотека с именем my-lib. Папка dist выглядит следующим образом:

dist
-->my-lib
---->{all the published files of my-lib}
-->my-app
---->{all the published files of my-app}

В этом случае пример tsconfig.json потребителя выглядит так:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "my-lib": [
        "dist/my-lib"
      ],
      "my-lib/*": [
        "dist/my-lib/*"
      ]
    }
  }
}

Выше в paths оба my-lib и my-lib/* необходимы. my-lib - это то, что можно использовать в кратком операторе импорта, например, следующим образом:

import { MyLibModule } from 'my-lib';

Пути после этих записей в tsconfig указывают на опубликованную библиотеку в dist.

Насколько я знаю, экспорт должен быть сделан вручную в index.ts пакета.

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