首页 > 解决方案 > 如何针对特定平台定位节点应用程序

问题描述

我有一个在带有 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

标签: node.jsnpmdependencies

解决方案


您在评论中提到pkg看起来像是一个可能的解决方案,但您担心它是特定于容器的。老实说,只要您不在 AWS Lambda 之类的无服务器环境中,这可能没问题。

除了那个或类似的包之外,你明显的选择是在 Linux ARM 设备上编译(你已经排除了),或者以某种方式摆脱特定于平台的依赖项。你真的需要snappy吗?你能忍受没有压缩或使用较慢的压缩库吗?至于fsevents,我相信它只是 macOS 并且不会对其他平台产生影响。您可能将其作为chokidar? 您似乎可以忽略那个。

编辑:注释表示snappy安装为kafka-node. snappy在 中是可选的kafka-node。如果您自己没有指定 snappy 压缩,那么它可能没有被使用。您可以在使用标志的情况下安装kafka-nodesnappy:尝试使用压缩然后将导致运行时错误。这可能允许您在未使用的 macOS 机器上进行本地检查。--no-optionalnpm install kafka-node --no-optionalsnappysnappy


推荐阅读