Как я могу создать и развернуть приложение (NestJS) как веб-приложение Azure?

Я использую структуру nx (https://nx.dev) для создания приложения angular + Nest. Приложение angular должно быть фронтенд-приложением, а вложенное приложение должно быть REST-API. Я создал репозиторий git в "Azure DevOps".

Я создаю эти приложения с

npx create-nx-workspace@latest
? Workspace name (e.g., org name)     nxtest
? What to create in the new workspace angular-nest      [a workspace with a full stack application (Angular + Nest)]
? Application name                    test-app
? Default stylesheet format           CSS

После этого у меня есть приложение Angular и Nest.

Я могу запустить приложение angular frontend с помощью

nx serve test-app

и приложение Nest (REST-API) с

ng serve api

Это сработало, и я могу использовать api в браузере.

На следующем шаге я фиксирую и отправляю его в репозиторий git.

Я создаю в Microsoft Azure веб-приложение.

Настройки Microsoft Azure Web-App

Теперь я хочу создать шаг CI/CD.

В лазурном портале...

  1. Выберите Центр развертывания
  2. Выберите Azure Repos
  3. Выберите Azure Pipelines
  4. Выберите мою организацию, проект, репо, ветвь и в качестве платформы веб-приложений NodeJS и Task Runner "Нет"

Настройки для развертывания как веб-приложения Azure

После этого у меня есть новый конвейер сборки в моем проекте "Azure DevOps".

Конвейер создания сборки работает успешно, но определение сборки каким-то образом неполное.

  1. Использовать версию узла
  2. npm запустить установку с помощью package.json
  3. Архивные файлы
  4. Артефакты пышных сборок

Результат на Azure:

  • Все файлы скопированы из репозитория git
  • создайте файл web.config с iisnode в качестве обработчика и укажите путь "server.js"

Но нет стартового файла javascript.

Итак, я редактирую конвейер сборки.

Используйте Node версии 12.13.0

Установить зависимости приложения

Запустить сборку Скрипт buildall -> nx run-many --target=build --all --prod

Starting: build
==============================================================================
Task         : npm
Description  : Run an npm command. Use NpmAuthenticate@0 task for latest capabilities.
Version      : 0.175.0
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/package/npm
==============================================================================
C:\windows\system32\cmd.exe /D /S /C "C:\hostedtoolcache\windows\node\12.13.0\x64\npm.cmd config list"
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = ""
user-agent = "npm/6.12.0 node/v12.13.0 win32 x64"

; environment configs
cache = "C:\\npm\\cache"
prefix = "C:\\npm\\prefix"

; node bin location = C:\hostedtoolcache\windows\node\12.13.0\x64\node.exe
; cwd = D:\a\1\s\nxtest
; HOME = C:\Users\VssAdministrator
; "npm config ls -l" to show all defaults.

C:\windows\system32\cmd.exe /D /S /C "C:\hostedtoolcache\windows\node\12.13.0\x64\npm.cmd run buildall"

> nxtest@0.0.0 buildall D:\a\1\s\nxtest
> nx run-many --target=build --all --prod


>  NX  Running target build for projects:

  - test-app
  - api

———————————————————————————————————————————————

> ng run api:build:production 
Starting type checking service...
Using 2 workers with 2048MB memory limit
Hash: d814495e471a4bbc4f1b
Built at: 10/06/2020 8:40:04 AM
Entrypoint main = main.js main.js.map
chunk    {0} main.js, main.js.map (main) 2.43 KiB [entry] [rendered]

> ng run test-app:build:production 

chunk {} runtime.e227d1a0e31cbccbf8ec.js (runtime) 1.45 kB [entry] [rendered]
chunk {1} main.47f3572e3dd98212c211.js (main) 122 kB [initial] [rendered]
chunk {2} polyfills.9e86b32c42185429d576.js (polyfills) 36.1 kB [initial] [rendered]
chunk {3} styles.280e991c5992f8630bc9.css (styles) 0 bytes [initial] [rendered]
Date: 2020-10-06T08:40:42.853Z - Hash: 958a1c63d1211ca0510b - Time: 30858ms

———————————————————————————————————————————————

>  NX   SUCCESS  Running target "build" succeeded


Finishing: build

Архивные файлы

Публикация артефактов сборки

Когда запуск конвейера завершен, у меня есть эти файлы в папке wwwroot веб-приложения.

  • main.js
  • main.js.map
  • web.config

Но если я запускаю приложение или посещаю URL-адрес, я всегда получаю следующую ошибку в консоли.

Application has thrown an uncaught exception and is terminated:
Error: Cannot find module 'tslib'
Require stack:
- D:\home\site\wwwroot\main.js
- D:\Program Files (x86)\iisnode\interceptor.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15)
    at Function.Module._load (internal/modules/cjs/loader.js:687:27)
    at Module.require (internal/modules/cjs/loader.js:849:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (D:\home\site\wwwroot\main.js:91:18)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)
    at Module.<anonymous> (D:\home\site\wwwroot\main.js:225:63)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)
    at Object.<anonymous> (D:\home\site\wwwroot\main.js:216:18)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)
Tue Oct 06 2020 08:16:28 GMT+0000 (Greenwich Mean Time): Application has thrown an uncaught exception and is terminated:
Error: Cannot find module 'tslib'
Require stack:
- D:\home\site\wwwroot\main.js
- D:\Program Files (x86)\iisnode\interceptor.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:794:15)
    at Function.Module._load (internal/modules/cjs/loader.js:687:27)
    at Module.require (internal/modules/cjs/loader.js:849:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (D:\home\site\wwwroot\main.js:91:18)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)
    at Module.<anonymous> (D:\home\site\wwwroot\main.js:225:63)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)
    at Object.<anonymous> (D:\home\site\wwwroot\main.js:216:18)
    at __webpack_require__ (D:\home\site\wwwroot\main.js:20:30)

Все мои предыдущие попытки заставить приложение Nestjs работать были тщетны. Я благодарен за любую помощь.

0 ответов

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