我正在将一个node.js应用程序部署到Cloudfoundry,唯一的模块依赖是restify。我尝试用我的本地node_modules目录推送它,并在cloudfoundry.json中使用npm shrinkwrap和'ignoreModules',但总是在stdout.log中使用它:
{ stack: [Getter/Setter],
arguments: undefined,
type: undefined,
message: '/var/vcap/data/dea/apps/myapp-0-6f9cf62f9bbe58f5d2eb13a94acb5d3a/app/node_modules/restify/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node: invalid ELF header' }
有什么想法吗?在此先感谢:)
编辑:抱歉,我的意思是'忽略* 节点 *模块'答案 0 :(得分:2)
我的猜测是为您的本地架构编译模块(比如x86),尝试运行它的服务器是一个不同的架构(比如64位)。节点模块可以在其中具有C ++扩展,npm将处理构建,您不一定只是将node_modules文件夹中的二进制文件从一个平台移动到另一个平台,您需要重新编译它们。
我不太了解Cloudfoundry告诉你如何做到这一点,希望其他人有更好的答案。
答案 1 :(得分:0)
我在设置开发Docker环境时遇到了类似的问题。我想将我的源文件挂载到docker镜像上,但是只为docker镜像编译了一个node_modules目录。当我在docker镜像上创建一个新目录,npm install
在该目录中,然后使用软链接获取我的一些源代码时,我看到了相同的行为。
解决方案:不要使用软链接。