Хорошо, я сдаюсь.Почему 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
и что можно сделать, чтобы предотвратить эту проблему?