nodejs npm 安装平台特定包
Posted
技术标签:
【中文标题】nodejs npm 安装平台特定包【英文标题】:nodejs npm install platform specific packages 【发布时间】:2016-10-27 13:07:40 【问题描述】:我的 nodejs 应用程序在 Raspberry Pi 上运行并使用 SPI 接口。 SPI 在 Windows 上不可用。
我使用的 npm 包无法按预期安装在 Windows 上。 我想在 Windows 上开发并做一些测试,但 NPM 失败 加载这个模块需要太多的手动解决方法。
我想要什么时候能够安装 SPI 模块 NPM 安装在 Raspberry 上运行并安装一个存根模块来伪造一个 Windows 上的 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")
任何一种解决方案都会很棒。 提前感谢您的帮助。
【问题讨论】:
您可以创建一个在postinstall
运行的节点脚本,您可以在其中检查platform
并以编程方式npm install
(通过require('npm')
)
【参考方案1】:
您可以使用 Node.js 中的 OS 模块来获取当前的 os.arch(),它将返回“x64”、“arm”等...
您可以在 my_module.js 中使用它来查看需要哪个包。
https://nodejs.org/api/os.html
【讨论】:
如何使用 os.arch 来更改软件包的 npm 安装?我看到 os.arch 可以在 js 代码中需要一个替代包。但是安装失败的软件包会在我走到这一步之前弄乱安装。所以我认为我需要能够控制安装的内容。 在这种情况下,当您在 Windows 中运行 npm install 时,您可以指定 --only=dev 标志。然后,您可以将您的“dependencies-for-win”更改为 fake-pi-spi 的 devDependencies。在此处查看更多信息link 谢谢,这些点现在已连接。 optionalDependencies 允许 spi 在 windows 上失败,尝试在 require("pi-spi") 上捕获。以上是关于nodejs npm 安装平台特定包的主要内容,如果未能解决你的问题,请参考以下文章