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

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

  • Пакеты / X-кли
  • пакеты / х-жильный

Я хочу иметь возможность импортировать символы из подкаталогов X-Core, так же, как вы сделали бы import map from 'lodash/map', пример:

import { fn } from '@mycompany/x-core/test';

Но я получаю следующую ошибку:

tsc -b packages/x-core packages/x-cli
packages/x-cli/src/main.ts:1:20 - error TS2307: Cannot find module '@mycompany/x-core/test'.

1 import { fn } from "@mycompany/x-core/test";
                     ~~~~~~~~~~~~~~~~~~~~~~~~

error Command failed with exit code 1.

Это работает, хотя, если он экспортируется в корень библиотеки:

import { otherFn } from '@mycompany/x-core';

Я сделал небольшой проект на Github, чтобы показать точно мои настройки, на основе lerna-yarn-workspaces-example: https://github.com/julienfouilhe/example-subdirectory-workspace-typescript-import

Есть ли способ сделать это, я не могу найти ничего, что работает. Я не знаю много о разрешении модуля, поэтому я не могу точно определить проблему!

0 ответов

Переход к корню при сборке работает и позволяет избежать проблем с инструментами, но, как уже упоминалось, это усложняет сборку, особенно для совместного использования в рабочих областях. Узел поля "экспорт" 14 является важным изменением, которое в конечном итоге должно упростить поддержку экспорта подкаталогов, но на данный момент он решает только часть проблемы, поскольку другие инструменты, похоже, еще не поддерживают это поле. Упомянутая конкретная ошибка все еще будет существовать с разрешением пути машинописного текста, которое можно разрешить с помощью"baseUrl" а также "paths" варианты в вашем tsconfig.json файл в корне, а затем используя "extends"чтобы поделиться этой конфигурации. К сожалению, если библиотека используется чем-то, созданным с помощью webpack, и вы используете v4, вам необходимо настроить шаг разрешения пути, потому что webpack не поддерживает поле "exports". Похоже, что это часть веб-пакета 5, если вы можете его использовать. Итак, если вы не публикуете свою библиотеку вне монорепозитория, то это можно решить, не перемещая все в корень с помощью более новых инструментов и некоторой работы по настройке.

Обновление: с помощью Nodejs 14 вы можете указать экспорт подпути в своем package.json.

https://nodejs.org/api/esm.html

Я не тестировал это лично, но похоже, что эту проблему можно решить, используя

"exports": {
  ".": "./lib"
}
Другие вопросы по тегам