【问题标题】:How to target node app for specific platform如何针对特定平台定位节点应用程序
【发布时间】:2021-03-19 09:39:55
【问题描述】:

我有一个节点应用程序,它在带有 ARM 处理器的小型 linux 设备上运行。我在 macOS 中开发,应用程序中有一些特定于平台的依赖项。现在我只是在 mac 上运行 npm install 并将整个代码库、node_modules 和所有内容复制到 linux 设备上。它似乎运行良好,但我不确定它是否会继续这样做。也许它只是还没有走上依赖于 mac 特定代码的执行路径。

我想我可以在 linux 设备上运行 npm install,但这意味着我们必须有一个可供我们的 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 可能适合您
  • @BraveButter 我看到了那个模块,但顶部有一个免责声明,上面写着Disclaimer: pkg was created for use within containers and is not intended for use in serverless environments.我没有在容器中运行它。

标签: node.js npm dependencies


【解决方案1】:

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

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

编辑:注释表明snappy 安装为kafka-node 的依赖项。 snappykafka-node 中是可选的。如果您自己没有指定 snappy 压缩,那么它可能没有被使用。您可以使用--no-optional 标志install kafka-node without snappynpm install kafka-node --no-optional 尝试使用snappy 压缩然后将导致运行时错误。这可能允许您在 macOS 机器上本地检查 snappy 没有被使用。

【讨论】:

  • 感谢您的信息。对snappy 的依赖是由于对kafka-node 的直接依赖,它必须在其依赖树的某个位置。原来对fsevents 的依赖来自mocha,这只是开发,所以没关系。我会更新问题以删除它。
  • 是否可以在 ARM 设备上下载一次kafka-node,然后将结果存储在应用程序的代码库中?有点像只针对那个包的本地存储库。然后我猜你必须以某种方式引用package.json 中的本地文件。如果我们只需要下载并编译一次 kafka 依赖项就可以了。
  • snappykafka-node 中是可选的。如果您没有指定 snappy 压缩,它可能没有被使用。您可以使用--no-optional 标志安装kafka-node 而不使用snappynpm install kafka-node --no-optional 尝试使用snappy 压缩将导致运行时错误。这可能允许您在 macOS 机器上本地检查 snappy 没有被使用。
  • 知道了。使用--no-optional 安装确实会删除 snappy,此时尝试使用压缩确实会导致您所说的错误。我想我会在没有 snappy 的情况下安装 kafka,并且在发送消息时不使用压缩。感谢您的帮助。
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多