Версия Azure NodeJS - PullRequest
       37

Версия Azure NodeJS

0 голосов
/ 04 января 2019

Хорошо, я сдаюсь.Почему Azure имеет какую-то версию узла по умолчанию (0.10.x для gawds), а затем полагается на использование жестко закодированных путей для конкретной требуемой версии?Это был не мой вопрос (это было риторическим).

Проблема с этим расположением состоит в том, что кажется, что "внутренние" (к приложению) вызовы сделаны к узлу, и, конечно, используется тот, что в $ PATH.

У нас есть приложение nodejs, express, angular.

Моя первая проблема (но не причины этого сообщения) заключалась в том, что я вложил package.json файлы в каталоги /, angular/ and server/.Корень один вызывает установку в подкаталогах.Это не работает в Azure.

Мне пришлось переместить вызовы на gulp и ng на Azure deploy.sh, сделав жестко запрограммированные ссылки на установленные модули узлов.deploy.sh содержит:

#!/bin/bash

...
NODE_EXE=`cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp"`
NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\""
GRUNT_CMD="\"$NODE_EXE\" ./node_modules/gulp/bin/gulp.js"
NG_CMD="\"$NODE_EXE\" ./node_modules/@angular/cli/bin/ng"

...

cd server
eval $NPM_CMD install --production
eval $GRUNT_CMD build

cd ../angular
eval $NPM_CMD install --production
eval $NG_CMD build --prod

cd ..

В качестве части построения производства NG выполняется этап минимизации.Похоже, что он имеет «внутренний вызов узла» и не работает:

remote: Selected node.js version 10.14.1. Use package.json file to choose a different version.
remote: Selected npm version 6.4.1
...
...
...
remote: Date: 2019-01-04T04:20:42.367Z
remote: ERROR in ./src/styles.scss
remote: Hash: 8062ccafe553f9f5894b
remote: Time: 33752ms
remote: chunk {0} runtime.ec2944dd8b20ec099bf3.js (runtime) 1.41 kB [entry] [rendered]
remote: chunk {1} main.9868d9b237c3a48c54da.js (main) 128 bytes [initial] [rendered]
remote: chunk {2} polyfills.85f47f0bf59079cbc23a.js (polyfills) 130 bytes [initial] [rendered]
remote: chunk {3}  (styles) [initial] [rendered]
remote: An error has occurred during web site deployment.
remote: Module build failed (from D:/home/site/wwwroot/angular/node_modules/mini-css-extract-plugin/dist/loader.js):
remote: ng build in angular failed
remote: ModuleBuildError: Module build failed (from D:/home/site/wwwroot/angular/node_modules/sass-loader/lib/loader.js):
remote: Error: Missing binding D:\home\site\wwwroot\angular\node_modules\node-sass\vendor\win32-ia32-64\binding.node
remote: Node Sass could not find a binding for your current environment: Windows 32-bit with Node.js 10.x
remote:
remote: Found bindings for the following environments:
remote:   - Windows 32-bit with Node 0.10.x

./src/styles.scss содержит:

@import '~@dhsui/kit/styles/dhs-kit-all';
@import "~bootstrap/dist/css/bootstrap.css";

Я попытался внести изменение, чтобы добавить желаемую версию узлакаталог в PATH (и вместо него указывается просто вызов node, а не полный путь, который Azure, по-видимому, требует от вас):

NODE_DIR=$(dirname "$(echo $NODE_EXE | tr '\\' '/')" | tr '/' '\\')
export PATH=$NODE_DIR:$PATH

Но это не удалось в том же месте.Так что, похоже, моя проблема не в that "internal" (to the app) calls are made to node and of course the one in $PATH is used.!(Это изменение фактически не сработало, поэтому я вернулся).

Кто-нибудь знает, почему была установлена ​​привязка для Node 0.10.x и что можно сделать, чтобы предотвратить эту проблему?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Мне нужно было

npm rebuild node-sass

перед запуском ng build --production.

Я обнаружил примечание об этом в сообщении об ошибке.Первоначально я отклонил это, поскольку npm install был запущен непосредственно перед ng build, так что это казалось излишним.Не так очевидно!

Я не узнал, ПОЧЕМУ ссылаются на nodejs 0.10.x.


Я только что получил ответ от @PeterPan о выборе узла по умолчанию по умолчаниюjsверсии.Это может ответить на вопрос, почему используется другая версия (поскольку, к счастью, может быть выбран вариант по умолчанию).Я стремлюсь проверить ответ Питера.


Мне не нравится, как установка узла Azure (по крайней мере, на сервере Windows NT) не работает точно так же, как на моем компьютере MacOSX.Узел является кроссплатформенным и должен вести себя везде одинаково (бар для платформо-зависимых модулей, таких как fsevents).Я считаю, что это провал.Напоминаю, что у меня есть один способ для Mac / Linux, а другой - для Azure.

В качестве альтернативы я попытаюсь установить это приложение node / express / angular в Linux под Linux и посмотреть, будет ли это лучше (к сожалению, гдеЯ работаю, зациклен на мысли «Windows», поэтому не думаю, что получу много пользы от этого ».

Благодарность Microsoft за использование скриптов bash.

0 голосов
/ 07 января 2019

Существует вики-страница Node versioning Project Kudu для веб-приложений Azure, которая может ответить на ваш вопрос о версии Node.До 31 октября 2017 года, когда редактировалась вики-страница, версия узла по умолчанию - v0.6.20, теперь - 0.10.40.Кажется, это соответствует шаблону развертывания веб-приложений Azure.

После создания веб-приложения вы можете настроить значение Azure Переменная среды сайта WEBSITE_NODE_DEFAULT_VERSION, чтобы изменить версию узла по умолчанию.на вкладке Application settings портала Azure, как показано на рисунке ниже, как в подразделе Change the Node version на вики-странице Configurable settings.

enter image description here

О всех доступных версиях узлов в веб-приложениях Azure вы можете ввести команду ls по пути D:\Program Files (x86)\nodejs консоли Kudu, чтобы вывести их в виде рисунка ниже.

enter image description here

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

enter image description here

Затем вы можете заставить ваш скрипт работать непосредственно с текущей версией Node, не обращая внимания на такие переменные среды, как PATH или другие, касающиеся Node.

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