为不同的体系结构安装node.js包

skb*_*skb 14 npm

我需要安装用于不同目标体系结构(Linux x64)的npm软件包,而不是从(Windows x86)运行npm的机器.有没有办法告诉npm install下载适用于其他操作系统/架构的软件包?

tho*_*nic 6

大多数本机节点模块使用node-pre-gyp安装脚本来搜索OS/arch/v8 ABI组合的预构建二进制文件,如果没有,则回退到本机构建.

假设您的本机模块使用node-pre-gyp,您可以这样做:

npm i --target_arch=x64 --target_platform=linux
Run Code Online (Sandbox Code Playgroud)

你会在输出中看到这样的东西:

> bcrypt@1.0.3 install /home/user/myProject/node_modules/bcrypt
> node-pre-gyp install --fallback-to-build

[bcrypt] Success: "/home/user/myProject/node_modules/bcrypt/lib/binding/bcrypt_lib.node" is installed via remote
Run Code Online (Sandbox Code Playgroud)

如果找不到预先构建的二进制文件,node-pre-gyp则会回退到尝试从源代码构建模块.

如果预构建的模块不可下载,那么还有一种方法可以从您自己的镜像构建和托管它们,但这是一个不同的问题:)

  • “target_arch”和“target_platform”似乎是node-pre-gyp的选项,但我在npm的文档中没有看到它们。我使用 npm 的这些选项测试了从 darwin 到 linux 的交叉安装,但它仍然安装了 darwin 软件包。 (2认同)

lxe*_*lxe 5

大多数二进制 npm 包.node从源代码编译二进制文件。您不能真正强制使用 npm 进行交叉编译,但您可以创建一个安装后脚本来重新编译node-gyp使用--arch标志重新运行的特定依赖项:

"postinstall" : "node-gyp -C node_modules/your-dependency clean configure --arch=x86_64 rebuild"

您将需要一个合适的编译器工具链。我不确定 Windows 是什么,但可能你最终会使用mingwcygwin