Как создать монорепозиторий Bazel TypeScript с индивидуально развертываемыми пакетами

Я пытался заставить монорепозиторий bazel с машинописным текстом работать. У меня есть пара требований.

  1. Я должен иметь возможность импортировать локальные пакеты, используя @myworkspace/ вместо ../../../ и т. д., без использования Bazel. В основном это связано с тем, что я использую автозаполнение, пока пишу.
  2. Пакет @myworkspace/ должен быть одним и тем же во время разработки и сборки, но только зависимости, управляемые Bazel, должны разрешаться при импорте при работе в песочнице. Просто чтобы я знал, не перепутал ли я имя пакета в правиле js_library.
  3. Для всего проекта должен быть только один файл блокировки. Все зависимости должны быть расположены в root/node_modules.
  4. Должна быть возможность индивидуально развертывать пакеты узлов, например @myworkspace/myCloudFunction.
  5. Должна быть возможность включать локальные зависимости в пакеты, которые будут развернуты.

Я новичок в Bazel, и кажется, что он требует некоторых изменений в менталитете при выходе из экосистемы NPM. Погуглив, мне удалось найти что-то, что работает для пунктов 1 и 2 (но я могу ошибаться). Я опубликовал репозиторий игровой площадки на https://github.com/vitorelourenco/bazelmono-ts (почти копия с https://github.com/lokshunhung/bazel-ts-monorepo с некоторыми идеями, которые я взял с https://github.com/угловой/угловой)

Мои вопросы по пунктам 3 и 4: Скажем, я хочу, чтобы библиотека Lodash была доступна в пакете @myworkspace/cloudFunction, который будет развернут в Google Cloud Functions. Если я установлю Lodash в папку @myworkspace/cloudFunction, то Lodash будет добавлен в package.json, но у меня будет вторая папка node_modules и второй файл yarn.lock, мне это не нужно. Но если я установлю его в root/, то Lodash не будет добавлен к зависимостям, перечисленным в package.json, расположенном в @myworkspace/cloudFunction, и когда я его разверну, он не будет установлен. Есть ли умный способ справиться с этой проблемой?

Пункт 5 очень похож. В идеале, окончательный вывод Bazel должен иметь локальные зависимости, связанные и готовые к использованию, но я пока не могу найти способ сделать это. Я попытался добавить правило pkg_npm в //packages/app в репозитории playgroup, но не смог заставить его включить в него //packages/common.

0 ответов

Другие вопросы по тегам