场景:我的节点应用程序已在我的CI(npm install
和npm test
)上进行测试和构建。然后将其与node_modules文件夹一起打包,并部署到目标环境。
到目前为止一切顺利。
然后我添加了一个模块node-argon2,在安装时使用node-gyp构建一个c库。 c库现在是在CI(亚马逊Linux机器)的npm install
期间构建的,整个应用程序打包并部署到目标服务器(另一个亚马逊Linux机器)。当我使用模块 node-argon2 发出此错误时,应用程序现在出错:Illegal instruction
。
我认为这是因为库编译会写出与当前环境相关的东西,因此,如果移动到另一个环境,它就不会按预期工作。
如果我在目标机器上重建库,一切都会顺利进行。
所以这是我的头脑风暴:
我应该在每次部署时在目标机器上安装该模块吗?我应该在目标机器而不是CI上安装整个应用程序(这对我来说似乎不对)?
我应该安装在全局范围内构建特定于环境的内容(npm install node-argon2 -g
)的特定模块并将其链接(npm link node-argon2
)吗?
我应该修复那个c库的编译,以便它能在目标机器上运行(不知道怎么做)?
我也想知道我是否完全错过了我所做的最佳实践。
提前感谢您的帮助!