Ok, j'abandonne. Pourquoi Azure a-t-il une version par défaut de node (0.10.x pour l'amour de Dieu) et s'appuie ensuite sur des chemins codés en dur pour la version spécifique requise ? Ce n'était pas ma question (c'était rhétorique).
Le problème avec cet arrangement est qu'il semble que des appels "internes" (à l'application) soient faits à node et bien sûr celui qui est dans $PATH est utilisé.
Nous avons une application nodejs, express, angular.
Mon premier problème (bien qu'il ne soit pas à l'origine de ce billet) est que j'ai imbriqué les éléments suivants package.json
fichiers dans /, angular/ and server/
les répertoires. La racine appelle install sur les sous-répertoires. Cela ne fonctionne pas dans Azure.
J'ai dû déplacer les appels vers gulp
y ng
vers l'azur deploy.sh
en faisant des références codées en dur aux modules de nœuds installés. Le site deploy.sh
contient :
#!/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 ..
Une étape de mimétisation fait partie de la construction de la production NG. Elle semble avoir un "appel de nœud interne" et échoue :
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
El ./src/styles.scss
contient :
@import '~@dhsui/kit/styles/dhs-kit-all';
@import "~bootstrap/dist/css/bootstrap.css";
J'ai essayé de faire une modification pour ajouter la version désirée du répertoire node au PATH (et j'ai changé pour simplement appeler node
plutôt que le chemin d'accès complet qu'Azure semble vous demander de faire) :
NODE_DIR=$(dirname "$(echo $NODE_EXE | tr '\\' '/')" | tr '/' '\\')
export PATH=$NODE_DIR:$PATH
Mais il a échoué au même endroit. Il semble donc que mon problème ne soit pas that "internal" (to the app) calls are made to node and of course the one in $PATH is used.
! (Ce changement n'a pas fonctionné et j'ai donc fait marche arrière).
Est-ce que quelqu'un sait pourquoi la liaison a été mise en place pour Node 0.10.x
et que peut-on faire pour éviter ce problème ?