azure上的节点js - 深度嵌套的节点模块导致错误

时间:2016-08-16 14:44:47

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

我正在使用一个名为swagger-tools的节点模块,它在内部依赖于lodash。安装swagger工具时,其node_modules文件夹的深度非常大,这会导致我的Azure应用程序(Windows服务器)出错。我在某处看到这个问题可以通过使用npm 3来解决,而npm 3安装在azure服务器上,我无法强制它使用它 - 错误日志表明正在使用npm 2。这是我在package.json中的方式:

"engineStrict": true,
"engines" : {
  "npm" : ">=3.0.0"
}

节点版本是4.4.7。 如果有人知道解决问题的不同方法,我会很高兴。

2 个答案:

答案 0 :(得分:0)

你是正确的,NPM 3应该解决这个问题,因为它使用平面文件系统而不是嵌套的依赖关系,其中windows文件系统不能很好地支持。 要强制NPM 3,它实际上取决于您的发布方法(git / vs)。 这是强制NPM 3的指南 - https://blogs.msdn.microsoft.com/azureossds/2015/09/13/npm3-on-azure-web-apps/

答案 1 :(得分:0)

如{@ 3}}所述,在Custom Deployment Script的Azure Web Apps文件系统上将npm路径设置为npm 3的绝对位置将是一个解决方案。

此外,还有一个更简单的解决方法。您可以在package.json中将nodejs版本定义为包含npm 3的版本。包含npm3的最低nodejs版本为5.0.0

因此,您只需修改engines中的package.json部分:

即可
"engines" : {
  "node" : "5.0.0"
}

您可以参考https://azure.microsoft.com/en-us/documentation/articles/nodejs-specify-node-version-azure-apps/了解更多信息。