Azure – Deploy Node.js + Vue + Webpack
Nie mogłem doczekać się aż napiszę tego posta. Minęło kilka dni, cisza nastała na blogu ale była spowodowana spadkiem mocy i frustracją spowodowaną wieloma bezowocnymi próbami zbudowania aplikacji node.js na serwerze Azure. Ale w końcu udało się. Można powiedzieć, że mam już prawie pełne CI
Scenariusz wdrożenia
![]() |
Azure deploy – node.js, vue.js, webpack |
- Pobiera kod źródłowy z githuba do folderu homesiterepository
- Kopiuje pliki do folderu homesitewwwroot
- Wykonuje instalację node_modules
Potencjalne problemy
- Node.js na Azure działa w trybie „production”. Weź to pod uwagę gdy chcesz uruchamiać skrypty które coś budują. Tutaj nie masz skonfigurowanego środowiska deweloperskiego adhoc.
- Zwróć uwagę na użytą wersję node.js oraz npm. Większość moich problemów wynikała z dość starej wersji npm 1.4. Można to zmienić dodając ustawienie WEBSITE_NODE_DEFAULT_VERSION. Listą dostępnych runtime jest duża i można ją zobaczyć pod adresem: https://your_site_name.scm.azurewebsites.net/api/diagnostics/runtime
- Zanim doszedłem do zmiany wersji node.js przez długi czas borykałem się ze znanym z wcześniejszych wersji windows problemem maksymalnego rozmiaru nazwy ścieżki ograniczonego do 260 znaków. Jest dostępne obejście tego problemu: #max_path-explanation-and-workarounds
- Pamiętaj aby nie kopiować nie potrzebnych rzeczy do folderu docelowego, np. logi z builda, node_modules typu devDependencies
#1 Własny skrypt deploy.cmd
azure site deploymentscript –node
Na uwagę zasługuje zmienna %DEPLOYMENT_SOURCE%. Wskazuje ona na ścieżkę do folderu repozytorium z projektem. W moim przypadku mój projekt nie leży w głównym katalogu repozytorium, więc musiałem dokonać zmiany w ustawieniach podając prawidłowy katalog.
![]() |
Azure – deploy.cmd path |
#2 Webpack build
deploy.cmd
:Deployment
echo Handling node.js deployment.
:: 1. Webpack Build
IF EXIST "%DEPLOYMENT_SOURCE%webpack.config.js" (
echo Installing node modules dev/prod
pushd "%DEPLOYMENT_SOURCE%"
call npm install --only=prod
call npm install --only=dev
echo Running webpack build
call npm run build
popd
IF !ERRORLEVEL! NEQ 0 goto error
echo Finished webpack build
)
- Sprawdzam czy w folderze projektu znajduje się plik konfiguracyjny webpack.config.js
- Następnie przystępuje do instalacji paczek node’a – produkcyjnych i deweloperskich. Związane jest to z tym iż package.json dzieli moduły, które są potrzebne do uruchomienia aplikacji (dependencies) od tych wymaganych tylko w środowisku deweloperskim (devDependencies). My potrzebujemy obydwie zależności.
- następnie uruchamiam skonfigurowany w package.json „build” skrypt. Komenda npm run build
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --open --hot",
"build": "cross-env NODE_ENV=production webpack --progress --hide-modules"
},
Tak wygląda log z wywołania:
![]() |
Azure – deploy.cmd output |
Widać, że został wykorzystany niestandardowy katalog źródłowy, własny skrypt oraz wywołanie instalacji paczek node’a i webpack.
#3 KuduSync
:: 2. KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd;node_modules;.vue;webpack.config.js"
IF !ERRORLEVEL! NEQ 0 goto error
)