NPM errors and control in Azure Websites

时间:2015-12-10 01:38:55

标签: node.js azure deployment npm azure-web-sites

I want to build my Node.JS application in a Azure Website.
There will be an usage of different NPM packages via my packages.json file.
My problem is that I often receive error messages which are related to missing NPM files.

Normally I put my files via FTP or edit them per VS Studio 15 Azure plugin directly on the server. This may be the reason why NPM isn't triggering as Microsoft intended it.

I would prefer a way in which I can just run commands with elevated privileges to have full control over NPM by myself. Which ways are possible to avaid these problems?

2 个答案:

答案 0 :(得分:2)

如果您通过FTP“手动”发布nodeJS应用程序,则无需担心。

首先,'手动'意味着手动。

GIT中

如果您使用通过Git进行持续部署,最后部署步骤是调用当前应用程序文件夹中的npm install,这将安装package.json文件中列出的所有软件包。

node_modules 文件夹默认排除在.gitignore文件中,因此所有包都由服务器下载

Web部署

如果您正在使用visual studio或命令行进行Web部署,则解决方案中包含的所有文件将被复制到包含 node_modules 文件夹的托管环境,因为由于文件夹包含大量的依赖项和文件,因此部署需要很长时间才能完成。

即使是最糟糕的情况:这种情况可能会带您进入您现在面临的相同情况。

FTP部署

你自己复制一切。因此在Web部署中发生同样的事情是在FTP部署方法中发生的。

- 问题在于,当您复制所有 node_modules 文件夹内容时,您假设这些依赖关系在目标环境中保持不变,大多数情况都是正确的,但并非总是如此。

某些依赖项是依赖于平台的,因此可能在您的开发环境中,依赖项在x86体系结构中正常工作,但如果您的目标计算机或网站(或它们之间的某些组合)是x64(实际情况我已经受到影响)该怎么办。

可能会发生其他相关问题。可能是您的直接依赖项没有问题,但链接的依赖项可以拥有它。

因此,强烈建议您始终在目标环境中运行npm install,并避免直接从您的开发环境中复制依赖项。

这样,您需要在目标环境中复制除 node_modules 文件夹之外的文件夹结构。然后在复制文件时,您需要在服务器上运行npm install

要实现这一点,你可以去

yoursitename.scm.azurewebsites.net

在那里你可以转到“Debug Console”选项卡,然后转到这个目录D:\home\site\wwwroot>并运行

npm install

之后,下载服务器/网站架构的软件包和依赖项。

希望这有帮助。

Azure调整Kudu输出设置,在本地Kudu实现中看起来输出是规范化的。

解决方法 - 非完美 - 可能是这个

npm install --dd

甚至更详细

npm install --ddd

答案 1 :(得分:1)

The most related answer from Microsoft itself is this
Using Node.js Modules with Azure applications

Regarding control via a console with elevated privileges there is the way of using the Kudu console. But the error output is quite weird. It's kind of putting blindly commands in the console without much feedback.

Maybe this is a way to go. But I didn't tried this yet.

Regarding deployment it looks like that Azure wants you to prefer Continuous Deployment.
The suggested way is this here.