如何针对特定平台定位节点应用程序
How to target node app for specific platform
我有一个节点应用程序,它 运行 在带有 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
哪个returns
node_modules/snappy/build/Release/binding.node: Mach-O 64-bit bundle x86_64
您在评论中提到 pkg
看起来像是一个可能的解决方案,但您担心它是特定于容器的。老实说,只要您不在像 AWS Lambda 这样的无服务器环境中,它可能就没问题。
除了那个或类似的包之外,您明显的选择是在 Linux ARM 设备上编译(您已经排除)或者以某种方式摆脱特定于平台的依赖性。你真的需要 snappy
? Can you live with no compression or with a slower compression library? As for fsevents
, I believe it is macOS only and will have no effect on other platforms. You are probably getting it as a dependency of chokidar
吗?看来你可以忽略那个。
编辑:注释表明 snappy
作为 kafka-node
的依赖项安装。 snappy
在 kafka-node
中是可选的。如果您自己没有指定 snappy 压缩,那么它可能没有被使用。您可以 install kafka-node
without snappy
使用 --no-optional
标志: npm install kafka-node --no-optional
尝试使用 snappy
压缩将导致运行时错误。这可能允许您在您的 macOS 机器上本地检查 snappy
没有被使用。
我有一个节点应用程序,它 运行 在带有 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
哪个returns
node_modules/snappy/build/Release/binding.node: Mach-O 64-bit bundle x86_64
您在评论中提到 pkg
看起来像是一个可能的解决方案,但您担心它是特定于容器的。老实说,只要您不在像 AWS Lambda 这样的无服务器环境中,它可能就没问题。
除了那个或类似的包之外,您明显的选择是在 Linux ARM 设备上编译(您已经排除)或者以某种方式摆脱特定于平台的依赖性。你真的需要 snappy
? Can you live with no compression or with a slower compression library? As for fsevents
, I believe it is macOS only and will have no effect on other platforms. You are probably getting it as a dependency of chokidar
吗?看来你可以忽略那个。
编辑:注释表明 snappy
作为 kafka-node
的依赖项安装。 snappy
在 kafka-node
中是可选的。如果您自己没有指定 snappy 压缩,那么它可能没有被使用。您可以 install kafka-node
without snappy
使用 --no-optional
标志: npm install kafka-node --no-optional
尝试使用 snappy
压缩将导致运行时错误。这可能允许您在您的 macOS 机器上本地检查 snappy
没有被使用。