Как импортировать локальный пакет в машинописный монорепо - PullRequest
0 голосов
/ 20 ноября 2018

Учитывая проект монорепо. --project_root/ |--packageA/ |--index.ts |--package.json |--foo/ |--index.ts |--packageB/ |--index.ts |--package.json |--bar/ |--spam.ts Обычно, когда вы находитесь в packageA/index.ts и хотите импортировать packageB/index.ts, вы делаете import index from '../packageB',

, а когда вы packageA/foo/index.ts и хотите импортировать packageB/index.ts, вам нужнопереместить два каталога вверх import index from '../../packageB'

Вопрос в том, есть ли способ импортировать как import index from 'packageB и для вложенной папки import spam from 'packageB/bar/spam'?

РЕДАКТИРОВАТЬ

Я загрузил репозиторий github для демонстрации проблемы https://github.com/jaimesangcap/lerna-ts-monorepo

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете сделать это, указав базовый URL и (в более сложных случаях), используя отображение пути .

Если у вас есть tsconfig.json вproject_root, вы можете достичь желаемой стратегии импорта, определив

"compilerOptions": {
  "baseUrl": "."
}

Это работает, если имя пакета всегда соответствует имени папки подпроекта.

Если это не так 'В этом случае вы можете использовать paths:

"compilerOptions": {
  "baseUrl": ".", // This must be specified if "paths" is.
  "paths": {
    "A": ["packageA"],
    "B": ["packageB"],
    "A/*": ["packageA/*"],
    "B/*": ["packageB/*"]
  }
}

. Это позволит машинописи корректно разрешать типы импорта во время компиляции.Однако пути импорта не разрешены в скомпилированном javascript, что означает, что необходимо сообщить следующему шагу в вашем конвейере (обычно это такой пакет, как webpack), как также разрешить этот импорт.В частности, для веб-пакетов это можно сделать, указав псевдоним в конфигурации веб-пакета:

resolve: {
  alias: {
      A: path.resolve(__dirname, 'packageA/'),
      B: path.resolve(__dirname, 'packageB/')
  }
}

Если вы хотите выполнить файлы машинописного текста напрямую, ts-node это самый простой способ сделать это, так как он уже будет знать об измененных путях из конфигурации машинописи, если вы используете tsconfig-paths - в этом случае вам просто нужно выполнить файл, используя node-ts -r tsconfig-paths/register packageA/index.ts (node-ts и tsconfig-paths должны быть установлены через npm)

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