2 votes

Version d'Azure NodeJS

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 ?

4voto

Peter Pan Points 9981

Il existe une page wiki Node versioning du projet Kudu pour Azure WebApps qui peut répondre à votre question sur la version de Node. Avant le 31 octobre 2017 lorsque la page wiki être modifié la version du nœud par défaut est. v0.6.20 maintenant c'est 0.10.40 . Il semble que cela dépende du modèle de déploiement d'Azure WebApps.

Après la création de votre webapp, vous pouvez configurer la valeur de Azure Variable d'environnement du site web WEBSITE_NODE_DEFAULT_VERSION pour modifier la version du nœud par défaut dans l'onglet Application settings du portail Azure, comme le montre la figure ci-dessous, comme la sous-section Change the Node version de la page wiki Configurable settings a dit.

enter image description here

Pour connaître toutes les versions de Node disponibles dans Azure WebApps, vous pouvez commander ls sous le chemin D:\Program Files (x86)\nodejs de la console Kudu pour les répertorier comme la figure ci-dessous.

enter image description here

Après avoir réglé le WEBSITE_NODE_DEFAULT_VERSION votre site web démarrera automatiquement et la version de Node a été mise à jour.

enter image description here

Ensuite, vous pouvez faire en sorte que votre script fonctionne directement sur la version actuelle de Node, sans tenir compte de ces variables d'environnement telles que PATH ou d'autres sur Node.

0voto

HankCa Points 176

Je devais

npm rebuild node-sass

avant d'exécuter le ng build --production .

J'ai trouvé une note à ce sujet dans le message d'erreur. J'ai d'abord pensé que c'était le npm install a été exécuté juste avant le ng build donc ça semblait redondant. Apparemment pas !

Je n'ai pas découvert POURQUOI nodejs 0.10.x était référencé d'une certaine manière.


Je viens de recevoir une réponse de @PeterPan concernant le choix des versions de nodejs par défaut. Cela peut répondre à la raison pour laquelle une version différente est utilisée (car il existe une version par défaut qui peut heureusement être choisie). J'ai l'intention de tester la réponse de Peter.


Je n'aime pas la façon dont les installations de nœuds Azure (serveur Windows NT au moins) ne fonctionnent pas exactement de la même façon que sur ma boîte MacOSX. Node est multiplateforme et devrait se comporter de la même manière partout (sauf pour les modules spécifiques à la plateforme comme fsevents ). Je pense que c'est un échec. Pour rappel, j'ai un moyen pour Mac / Linux et un autre pour Azure.

Je vais aussi essayer d'installer cette application web node / express / angular sur Linux sous Azure et voir si c'est mieux (malheureusement, l'endroit où je travaille est enfermé dans la pensée 'Windows' donc je ne pense pas que je gagnerai beaucoup de terrain de cette façon).

Bravo à Microsoft pour avoir autorisé l'utilisation de bash scripts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X