我应该安装在CI或目标服务器上构建C库的节点模块吗?

时间:2016-10-20 15:34:48

标签: npm continuous-integration node-gyp

场景:我的节点应用程序已在我的CI(npm installnpm test)上进行测试和构建。然后将其与node_modules文件夹一起打包,并部署到目标环境。

到目前为止一切顺利。

然后我添加了一个模块node-argon2,在安装时使用node-gyp构建一个c库。 c库现在是在CI(亚马逊Linux机器)的npm install期间构建的,整个应用程序打包并部署到目标服务器(另一个亚马逊Linux机器)。当我使用模块 node-argon2 发出此错误时,应用程序现在出错:Illegal instruction

我认为这是因为库编译会写出与当前环境相关的东西,因此,如果移动到另一个环境,它就不会按预期工作。

如果我在目标机器上重建库,一切都会顺利进行。

所以这是我的头脑风暴:

  1. 我应该在每次部署时在目标机器上安装该模块吗?我应该在目标机器而不是CI上安装整个应用程序(这对我来说似乎不对)?

  2. 我应该安装在全局范围内构建特定于环境的内容(npm install node-argon2 -g)的特定模块并将其链接(npm link node-argon2)吗?

  3. 我应该修复那个c库的编译,以便它能在目标机器上运行(不知道怎么做)?

  4. 我也想知道我是否完全错过了我所做的最佳实践。

    提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可能想要考虑使用Docker打包您的应用程序。带Docker的Containerising节点令人难以置信easy

如果您现在不想解决这个问题,我认为您应该考虑在每次部署时重新安装npm软件包 - 这是IMO最可靠的方式。