问题
是否有一种方法可以在我的应用程序中为我所针对的多个平台安装node-sqlite3
,而不需要单独为每个目标平台组合运行独立构建?
背景
在我的Node.js应用程序中,我有一个npm依赖项node-sqlite3
(GitHub,npm),其中包含不同平台的不同二进制文件(绑定)。
我的应用程序针对不同的平台,包括Windows、Linux和macOS(ia32和x64),以及现代Node版本:v6、v7和v8。该应用程序没有任何特定于平台的行为。
如果我使用npm install
安装项目的依赖项,node-sqlite3
只会为当前平台下载二进制文件(假设是win32
,x64
,Node v7.10
)。
我还有一个Travis CI构建配置,我将其用于持续部署以及持续集成。我选择Ubuntu Trusty作为执行构建的主机。
作为构建过程的一部分,应用程序的依赖项正在通过npm install
进行安装。在部署过程中,已构建的应用程序及其依赖项将被打包(归档)并上传到文件托管以供进一步分发。
问题
node-sqlite3
没有为我需要的所有目标平台安装,而只是为当前使用的平台安装(用于开发或执行构建)。
可能的解决方案
我可以执行构建和部署:
- 使用Travis - 用于Linux和macOS
- 使用AppVeyor - 用于Windows
- 但这似乎是一个很大的开销。正如我之前所说,该应用程序没有任何特定于平台的行为。而且我相信
node-sqlite3
的供应商已经测试了我所针对的所有主要平台。
lib/binding/node-v48-linux-x64/node_sqlite3.node
。尽管这里写着node-v48
,但你应该使用node -v
命令的输出作为参数。在我的情况下,它是6.9.4
。 - Zach ThackerError: Cannot find module 'C:\snapshot\modbus\node_modules\sqlite3\lib\binding\napi-v6-win32-unknown-x64\node_sqlite3.node'
要在 Linux 构建过程中包含 Windows sqlite3 节点,您需要执行以下操作:/node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=win32 --target_arch=x64 --target=16.15.0 --target_libc=unknown
- ben