Как собрать NestJs api из моно репозитория

Я работаю над проектом, в котором мы храним наш код в монорепозитории, который «управляется» nrwl. Репо содержит пару приложений angular и пару apis nestjs.

Теперь мы хотим докеризовать API, чтобы иметь возможность развертывать их в наших кубернетах.

Я могу запустить единый api, вызвав ng serve api1. Я также могу создать единый api, запустив ng build api1. У меня проблема в том, что каждому api нужна развернутая полная папка node_modules. Насколько я знаю, angular использует webpack для упаковки всех своих зависимостей.

Есть ли способ создать API NestJs и включить все необходимые node_modules?


person Woozar    schedule 30.04.2019    source источник
comment
Я не уверен, что вы имеете в виду, говоря, что api требует полных node_modules. На этапе сборки потребуется код из библиотек в node_modules и создать пакет, который можно развернуть. Разве это не так с вашей настройкой?   -  person electrichead    schedule 14.05.2019


Ответы (2)


На самом деле мы только что выпустили собственный способ создания монорепозиций с помощью NestJS, вы можете узнать больше о полное объявление здесь в блоге Trilon

С помощью автономного приложения NestJS теперь вы можете просто создать (другое приложение или библиотеку) и автоматически превратить его в рабочее пространство монорепозитория.

# make sure you have the latest @nestjs/cli
npm i --g @nestjs/cli

# if you want to create an app
nest g app my-other-app

# library
nest g lib my-library

Теперь вы сможете использовать nest build NAME для сборки любого приложения, которое вам нужно, и все модули node_modules и т. Д. Будут правильно объединены и т. Д.!


Эта новая настройка рабочего пространства создаст соглашение об именах, к которому вы привыкли:

# ** FROM

 /src/ ... application code ...

# ** TO

/apps/
  /nest-app/
  /another-app/

/libs/
  /some-shared-lib/
  / ... /

В настоящее время способ настройки монорепозиториев в Nest идеально подходит для монорепозиториев, которые являются только кодовыми базами вложений / узлов. Монорепозиторий Frontend мог бы храниться отдельно где-нибудь в другом месте, поскольку существует ограниченный код (только некоторые интерфейсы без декораторов), который может совместно использоваться FE ‹> BE.

Надеюсь, это поможет :)

person Mark Pieszak - Trilon.io    schedule 03.10.2019
comment
Я уже работаю над следующим проектом, но надеюсь, что он поможет другим. - person Woozar; 04.10.2019
comment
Если вы хотите запустить свою службу с помощью Docker, вам все равно нужно полностью скопировать node_modules внутри или скопировать package.json и установить зависимости внутри. Есть ли способ избежать этого @Mark? - person Tome Pejoski; 26.04.2020

Попробуйте сделать npm i в папке, содержащей проект, он должен установить все зависимости в папку nodes_modules.

Если вы используете докер, вы можете запустить эту команду перед созданием приложения в Dockerfile, как это

RUN npm i <== Install dependencies

RUN ng build api1 <== Build the app

CMD ["ng", "serve", "api1"] <== Run the app
person Dudu    schedule 30.04.2019
comment
Это даже не касается того, что я не хочу добавлять папку node_modules в свое развертывание. - person Woozar; 30.04.2019