我想在 Azure 网站中构建我的 Node.JS 应用程序。
将通过我的 packages.json
文件使用不同的 NPM 包。
我的问题是,我经常收到与缺少 NPM 文件相关的错误消息。
通常,我通过 FTP 放置文件或直接在服务器上通过 VS Studio 15 Azure 插件编辑文件。这可能是 NPM 未按 Microsoft 预期触发的原因。
我更喜欢一种只需以提升的权限运行命令即可完全控制 NPM 的方式。 有哪些方法可以解决这些问题?
最佳答案
如果您通过 FTP“手动”发布 NodeJS 应用程序,则无需担心。
首先,“手动”意味着手动。
Git
如果您使用通过 Git 持续部署,最后的部署步骤是在当前应用程序文件夹中调用 npm install
,这将安装 中列出的所有软件包package.json
文件。
node_modules文件夹默认排除在.gitignore
文件中,因此所有包都由服务器下载
网络部署
如果您从 Visual Studio 或命令行使用 Web 部署,解决方案中包含的所有文件都会复制到托管环境,包括 node_modules 文件夹,因为由于该文件夹包含大量依赖项和文件,部署将需要很长时间才能完成。
最糟糕的是:这种情况可能会将您带到您现在面临的相同情况。
FTP部署
您自己复制了所有内容。因此,在 Web 部署中发生同样的事情也发生在 FTP 部署方法中。
-- 问题是,当您复制所有这些 node_modules 文件夹内容时,您假设这些依赖项在目标环境中保持不变,大多数情况下都是如此,但并非总是如此。
一些依赖项是平台相关的,所以也许在您的开发环境中,依赖项在 x86 架构中可以正常工作,但是如果您的目标计算机或网站(或它们之间的某种混合)是 x64 该怎么办(实际情况我已经遭受了它)。
可能会发生其他相关问题。可能您的直接依赖项没有问题,但链接到它们的依赖项可能有问题。
因此强烈建议始终在目标环境中运行 npm install
并避免直接从开发环境复制依赖项。
这样,您需要在目标环境中复制不包括 node_modules 文件夹的文件夹结构。然后,当复制文件时,您需要在服务器上运行 npm install
。
要实现这一目标,您可以访问
yoursitename.scm.azurewebsites.net
您可以转到“调试控制台”选项卡,然后转到此目录D:\home\site\wwwroot>
并运行
npm install
之后,将下载服务器/网站架构的包和依赖项。
希望这有帮助。
Azure 调整 Kudu 输出设置,在本地 Kudu 实现中看起来输出已标准化。
解决方法 - 不完美 - 可能是这样的
npm install --dd
或者更详细
npm install --ddd
关于node.js - Azure 网站中的 NPM 错误和控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34192264/