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 安装平台特定包的主要内容,如果未能解决你的问题,请参考以下文章

Sonic测试平台搭建--设备接入

我的npm笔记

如何用nodejs搭建mssql

基于node平台使用npm包管理工具

iOS - NPM NodeJS 包管理

nodejs npm常用命令