我有一些应用程序使用了奇妙的node-sqlite3模块。它的一个缺点是它在安装时从源构建sqlite。我部署的方式更加复杂;我正在使用厨师,它为每个部署提供了一个干净的源代码树。然后,我在每个应用程序根目录下执行npm install
。对于大多数事情来说这不是问题,因为它只是命中本地缓存。但对于sqlite3,它为模块引用的每个位置构建一个全新的副本;在我的情况下4次!什么需要几秒钟现在需要几分钟,这在测试暂存环境中的新更改时尤其糟糕。
原则上,我应该能够为模块的给定版本执行一次构建,对其进行缓存,并在部署时只复制或链接二进制文件。有没有人做过类似的事情?那里潜藏着恶魔吗?
答案 0 :(得分:1)
我们在Chef上有与Node.js类似的设置,并选择全局安装sqlite3。 Node.js样式指南建议不要这样做,但似乎最好每次部署时重新编译sqlite3几分钟:
在chef或package.json中你有类似
的东西(sudo) npm install -g sqlite3@2.1.x
确保将全局NODE_PATH添加到init脚本中。
node NODE_PATH=/usr/local/lib/node_modules app.js