2016-06-24 49 views
1

我的nodejs应用程序在Raspberry Pi上运行,并使用SPI接口。 SPI在Windows上不可用。nodejs npm安装平台特定软件包

我正在使用的npm包无法安装在windows上,就像我期望的那样。 我想开发并在Windows上进行一些测试,但是NPM失败 加载此模块会强制执行太多手动解决方法。

当我在Raspberry上运行 NPM安装时,我想要安装SPI模块,并在窗口上安装存根模块伪造 SPI。

在伪代码:文件的package.json

"dependencies-for-linux": { "pi-spi": "~1.0.1"}, 
"dependencies-for-win": { "pi-spi": "./some_local_file_to_fake_pi_spi_api"} 

另一种方法可以不中止是安装包失败。对于替代 伪代码:文件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") 

两种解决方案将是巨大的。 非常感谢您的帮助。

+0

你可以让你在'postinstall'运行节点脚本,你检查'platform'和编程'NPM install'(通过'要求( '故宫')') – topheman

+0

感谢你的帮助 – grabbag

回答

0

您可以使用OS模块中的Node.js来获取当前os.arch(),这将返回“64”,“手臂”,等...

可以在my_module使用。 js看看哪个包需要。

https://nodejs.org/api/os.html

+0

如何使用os.arch来改变软件包的npm安装?我看到os.arch可以在js代码中需要一个替代包。但是,在安装之前,无法安装的软件包会使安装变得困难。所以我认为我需要能够控制安装的内容。 – grabbag

+0

在这种情况下,当您在Windows中运行npm install时,您可以指定--only = dev标志。然后,您可以将您的“取胜依赖关系”更改为dev-pi-spi的devDependencies。在这里查看更多信息[链接](http://stackoverflow.com/questions/9268259/how-do-you-prevent-install-of-devdependencies-npm-modules-for-node-js-package?rq=1) – JayhoPeter

+0

谢谢,现在连接的点。可选的依赖性允许spi在Windows上失败,试着抓住require(“pi-spi”)。 – grabbag