跨平台安装 npm 包 sqlite3
Cross-platform install of npm package sqlite3
问题
有没有办法为我在我的应用程序中定位的多个平台安装 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
的供应商已在我所针对的所有主要平台上对其进行了测试。
是,万一node-sqlite3
你有这样的能力
这是可能的,因为它的所有者 mapbox uses node-pre-gyp
(GitHub, npm) 用于分发 node-sqlite3
。
使用 npm install
安装应用程序的依赖项后 在节点项目的根目录中针对 每个目标平台组合 [=57] 执行以下命令 =]:
./node_modules/.bin/node-pre-gyp install
--directory=./node_modules/sqlite3
--target_platform={OS}
--target_arch={OS architecture}
--target={Node version}
(请注意,这里的换行符只是为了清楚起见,您必须在执行前删除或转义它们)
因此,您需要在 ./node_modules/sqlite3/lib/binding/
目录中进行绑定。
选项
这是 node-pre-gyp docs 中的选项说明。
--directory: run the command in this directory
--target_platform=win32: Pass the target platform and override the host platform. Valid values are linux, darwin, win32, sunos, freebsd, openbsd, and aix.
--target_arch=ia32: Pass the target arch and override the host arch. Valid values are 'ia32','x64', or arm.
--target=0.10.25: Pass the target node or node-webkit version to compile against
如果它们存在,将为所选平台预构建的二进制文件将从文件存储 (Amazon S3) 下载。否则你必须自己构建二进制文件。
node-sqlite3
的可用二进制文件列表是 here。
例子
针对特定目标平台的几个示例:
• Windows x86 和节点 6.10.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=win32 --target_arch=ia32 --target=6.10.0
• macOS x64 和节点 7.10.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=darwin--target_arch=x64 --target=7.10.0
• Linux x64 和节点 8.0.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=linux--target_arch=x64 --target=8.0.0
问题
有没有办法为我在我的应用程序中定位的多个平台安装 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
的供应商已在我所针对的所有主要平台上对其进行了测试。
是,万一node-sqlite3
你有这样的能力
这是可能的,因为它的所有者 mapbox uses node-pre-gyp
(GitHub, npm) 用于分发 node-sqlite3
。
使用 npm install
安装应用程序的依赖项后 在节点项目的根目录中针对 每个目标平台组合 [=57] 执行以下命令 =]:
./node_modules/.bin/node-pre-gyp install
--directory=./node_modules/sqlite3
--target_platform={OS}
--target_arch={OS architecture}
--target={Node version}
(请注意,这里的换行符只是为了清楚起见,您必须在执行前删除或转义它们)
因此,您需要在 ./node_modules/sqlite3/lib/binding/
目录中进行绑定。
选项
这是 node-pre-gyp docs 中的选项说明。
--directory: run the command in this directory
--target_platform=win32: Pass the target platform and override the host platform. Valid values are linux, darwin, win32, sunos, freebsd, openbsd, and aix.
--target_arch=ia32: Pass the target arch and override the host arch. Valid values are 'ia32','x64', or arm.
--target=0.10.25: Pass the target node or node-webkit version to compile against
如果它们存在,将为所选平台预构建的二进制文件将从文件存储 (Amazon S3) 下载。否则你必须自己构建二进制文件。
node-sqlite3
的可用二进制文件列表是 here。
例子
针对特定目标平台的几个示例:
• Windows x86 和节点 6.10.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=win32 --target_arch=ia32 --target=6.10.0
• macOS x64 和节点 7.10.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=darwin--target_arch=x64 --target=7.10.0
• Linux x64 和节点 8.0.0:
./node_modules/.bin/node-pre-gyp install --directory=./node_modules/sqlite3 --target_platform=linux--target_arch=x64 --target=8.0.0