Azure NodeJS版本

时间:2019-01-04 06:34:19

标签: node.js angular azure

好吧,我放弃。为什么Azure具有某个默认版本的节点(出于安全考虑,为0.10.x),然后依赖于对所需的特定版本使用硬编码路径?那不是我的问题(这是夸夸其谈)。

这种安排的问题在于,似乎对节点进行了“内部”(对应用程序)调用,并且当然使用了$ PATH中的那个。

我们有一个nodejs,express,Angular应用程序。

我的第一个问题(尽管不是本文的原因)是我在package.json目录中嵌套了/, angular/ and server/文件。根调用之一安装在子目录上。这在Azure中不起作用。

我必须通过对已安装的节点模块进行硬编码引用,将对gulpng的调用移至Azure deploy.shdeploy.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 :(得分:3)

有一个适用于Azure WebApp的Project Kudu的Wiki页面Node versioning,可以回答有关节点版本的问题。在2017年10月31日之前,当编辑Wiki页面时,默认节点版本为v0.6.20,现在为0.10.40。似乎取决于Azure WebApp的部署模板。

创建Web应用程序后,可以配置Azure Website environment variable WEBSITE_NODE_DEFAULT_VERSION的值以在Azure门户的标签Application settings中更改默认的节点版本,如下图所示,如下图所示: Wiki页面Configurable settings的{​​{3}}小节说。

Change the Node version

关于Azure WebApp中所有可用的节点版本,您可以在Kudu控制台的路径ls下命令D:\Program Files (x86)\nodejs将其列出,如下图所示。

enter image description here

设置WEBSITE_NODE_DEFAULT_VERSION后,您的网站将自动重新启动并且Node版本已升级。

enter image description here

然后,您可以使脚本直接在当前的Node版本上运行,而无需考虑诸如PATH之类的环境变量或其他有关Node的变量。

答案 1 :(得分:0)

我不得不

npm rebuild node-sass

在运行ng build --production之前。

我在错误消息中找到了关于此内容的注释。我最初是因为npm installng build之前运行而忽略了这一点,所以它似乎是多余的。显然不是这样!

我不知道为什么以某种方式引用了nodejs 0.10.x


我刚刚从@PeterPan收到了有关选择默认nodejs版本的答案。这可能会回答为什么要使用其他版本的情况(因为幸运的是可以选择默认值)。我的目的是测试彼得的答案。


我不喜欢Azure(至少是Windows NT服务器)节点的安装方式与MacOSX盒子上的安装方式完全不同。 Node是跨平台的,并且在任何地方都应该表现相同({{1}这样的平台特定模块的栏)。我相信这是一个失败。提醒一下,我有一种方法用于Mac / Linux,另一种方法用于Azure。

或者,我将尝试在Azure的Linux上安装此节点/ express / angular Web应用程序,看看效果是否更好(不幸的是,我的工作重点是思考“ Windows”,所以我认为我不会收获很多)那样接地。

对允许使用bash脚本表示敬意。