Node.js nodejs npm安装特定于平台的软件包

Node.js nodejs npm安装特定于平台的软件包,node.js,npm,Node.js,Npm,我的nodejs应用程序运行在Raspberry Pi上,并使用SPI接口。 SPI在windows上不可用 我正在使用的npm软件包未能像我预期的那样在windows上安装。 我想在Windows上开发和测试,但NPM失败了 加载此模块会强制执行过多的手动解决方法 我希望能够在以下情况下安装SPI模块: NPM安装在Raspberry上运行,并安装存根模块以伪造 窗口上的SPI 在伪代码中:file package.json "dependencies-for-linux": { "pi-sp

我的nodejs应用程序运行在Raspberry Pi上,并使用SPI接口。 SPI在windows上不可用

我正在使用的npm软件包未能像我预期的那样在windows上安装。 我想在Windows上开发和测试,但NPM失败了 加载此模块会强制执行过多的手动解决方法

我希望能够在以下情况下安装SPI模块: NPM安装在Raspberry上运行,并安装存根模块以伪造 窗口上的SPI

在伪代码中:file package.json

"dependencies-for-linux": { "pi-spi":  "~1.0.1"},
"dependencies-for-win": { "pi-spi": "./some_local_file_to_fake_pi_spi_api"}
另一种方法是在软件包失败时不中止安装。 备选方案的伪代码:file package.jon

"dependencies-that-do-not-fail-install" : { "pi-spi":  "~1.0.1"}
my_module.js

 var pi_spi = null
    try{
        pi_spi = require("pi-spi")
    }
    catch (e) {
        pi_spi = require("fake-pi-spi")
这两种解决方案都很好。
提前感谢您的帮助。

您可以使用Node.js中的OS模块获取当前的OS.arch(),它将返回“x64”、“arm”等

您可以在my_module.js中使用它来查看需要哪个包


您可以制作一个节点脚本,在
postinstall
上运行,在那里您可以检查
平台
,并通过编程方式
npm安装
(通过
require('npm')
)如何使用os.arch更改包的npm安装?我看到js代码中的os.arch可能需要另一个包。但未能安装的软件包将在我走到这一步之前把安装搞得一团糟。因此,我认为我需要能够控制安装的内容。在这种情况下,当您在windows中运行npm安装时,可以指定--only=dev标志。然后,您可以将“win的依赖项”更改为假pi spi的依赖项。请参阅此处的更多信息,谢谢,这些点现在已连接。optionalDependencies允许spi在windows上失败,在require上尝试catch(“pi spi”)。