1

我无法在我的任何一个 Azure Web 应用程序(基于 Windows 的运行 Kudu)上安装 NodeJs 性能监视器“StackImpact”。在我的 Windows 10 笔记本电脑上本地一切正常,但 NPM 安装在服务器上失败(输出如下)

我尝试升级到 Node 10.6(Azure 支持的最新版本),然后降级回 Node 8.11.1。我仔细检查了机器是否以 64 位运行。

... 89 verbose stack Error: stackimpact@1.3.10 install: `node node-gyp-fallback.js` 89 verbose stack Exit status 1 89 verbose stack at EventEmitter.<anonymous> (D:\Program Files (x86)\npm\6.1.0\node_modules\npm\node_modules\npm-lifecycle\index.js:304:16) 89 verbose stack at EventEmitter.emit (events.js:182:13) 89 verbose stack at ChildProcess.<anonymous> (D:\Program Files (x86)\npm\6.1.0\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14) 89 verbose stack at ChildProcess.emit (events.js:182:13) 89 verbose stack at maybeClose (internal/child_process.js:961:16) 89 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:248:5) 90 verbose pkgid stackimpact@1.3.10 91 verbose cwd D:\home\site\wwwroot 92 verbose Windows_NT 10.0.14393 93 verbose argv "D:\\Program Files (x86)\\nodejs\\10.6.0\\node.exe" "D:\\Program Files (x86)\\npm\\6.1.0\\node_modules\\npm\\bin\\npm-cli.js" "install" "stackimpact" 94 verbose node v10.6.0 95 verbose npm v6.1.0 96 error code ELIFECYCLE 97 error errno 1 98 error stackimpact@1.3.10 install: `node node-gyp-fallback.js` 98 error Exit status 1 99 error Failed at the stackimpact@1.3.10 install script. 99 error This is probably not a problem with npm. There is likely additional logging output above. 100 verbose exit [ 1, true ]

任何帮助将不胜感激!

4

1 回答 1

1

南臂。我在我这边重现你的问题。

在此处输入图像描述

根据我的观察,它与node版本或npm版本无关。它说找不到节点gyp。

所以,我按照这个案例来运行命令npm install -global node-gyp。您可以在D:\local\AppData\npm>.

在此处输入图像描述

众所周知,node-gyp需要依赖python2.7andMicrosoft's vc++ build tools进行编译,这在Linux系统上是可以的,因为默认安装了Linux,但是Windows操作系统默认没有安装python2.7和vc++ Build tool。

我试图安装它npm install --global --production windows-build-tools但失败了。它需要admin我们在网络应用沙盒限制中无法触及的权限。

因此,作为解决方法,也许您必须在本地安装软件包,然后将整个node_modules文件夹上传到 azure,而不是在 kudu 中安装软件包。


添加:

Azure 支持指出,该软件包仅在 64 位环境中运行,而他们的 Web 应用程序默认运行 x86 节点,即使您已将环境设置为 x64。

您可以通过手动将 x64 节点复制到服务器、更新iisnode.yml以指向它然后手动更新来覆盖node_modules。所有这些都完全破坏了干净的 CI 路径的任何机会。

于 2018-12-05T02:44:45.383 回答