node.js - 如何针对特定平台定位节点应用程序
问题描述
我有一个在带有 ARM 处理器的小型 linux 设备上运行的节点应用程序。我在 macOS 中开发,应用程序中有一些特定于平台的依赖项。现在我只是npm install
在 mac 上运行并将整个代码库复制node_modules
到 linux 设备上。它似乎运行良好,但我不确定它是否会继续这样做。也许它只是还没有走上依赖于 mac 特定代码的执行路径。
我想我可以npm install
在 linux 设备上运行,但这意味着我们必须有一个可用的 CI/CD 管道才能使用,这将是一个令人头疼的问题,而且从长远来看可能不是一个现实的解决方案。
还有哪些其他选择?有没有办法强制 npm 安装依赖项,就好像它在 linux ARM 盒子上一样?我知道您可以使用electron-packager使用电子应用程序来做到这一点。这可以为非电子节点应用程序完成吗?
仅供参考,我正在使用以下命令来确定是否存在 macOS 特定的依赖项:
find node_modules -name "*.node" | xargs file
返回
node_modules/snappy/build/Release/binding.node: Mach-O 64-bit bundle x86_64
解决方案
您在评论中提到pkg
看起来像是一个可能的解决方案,但您担心它是特定于容器的。老实说,只要您不在 AWS Lambda 之类的无服务器环境中,这可能没问题。
除了那个或类似的包之外,你明显的选择是在 Linux ARM 设备上编译(你已经排除了),或者以某种方式摆脱特定于平台的依赖项。你真的需要snappy
吗?你能忍受没有压缩或使用较慢的压缩库吗?至于fsevents
,我相信它只是 macOS 并且不会对其他平台产生影响。您可能将其作为chokidar
? 您似乎可以忽略那个。
编辑:注释表示snappy
安装为kafka-node
. snappy
在 中是可选的kafka-node
。如果您自己没有指定 snappy 压缩,那么它可能没有被使用。您可以在不使用标志的情况下安装kafka-node
snappy
:尝试使用压缩然后将导致运行时错误。这可能允许您在未使用的 macOS 机器上进行本地检查。--no-optional
npm install kafka-node --no-optional
snappy
snappy
推荐阅读
- linux - 如何在鱼壳中的每个会话中永久设置环境?
- java - 查找给定 ArrayList 的所有可能排列
, 并将它们存储在全局变量中 - php - 标题扩展问题 HTML 和 CSS?
- python - 如何返回python列表中另一个元素周围的元素?
- python - django.db.utils.IntegrityError:NOT NULL 约束失败:appname_modelName.id
- php - 在模板中使用未设置的框架变量时出现 500 错误
- iot - 如果有人点击 iot 设备,我如何在 google home 上获得通知
- sql - 如何在sql中修改json对象
- macos - 未知的 CMake 命令“qt5_use_modules” - OSX 上的慢动作视频
- python - Tkinter 线程问题:system() 最多接受 1 个参数(给定 27 个)