Node.js 如何针对特定平台定位节点应用程序
我有一个节点应用程序,它运行在带有ARM处理器的小型linux设备上。我在macOS中开发,应用程序中存在一些特定于平台的依赖项。现在我只需在mac上运行Node.js 如何针对特定平台定位节点应用程序,node.js,npm,dependencies,Node.js,Npm,Dependencies,我有一个节点应用程序,它运行在带有ARM处理器的小型linux设备上。我在macOS中开发,应用程序中存在一些特定于平台的依赖项。现在我只需在mac上运行npm install,然后将整个代码库、node\u模块以及所有内容复制到linux设备上。它似乎运行正常,但我不确定它是否会继续这样做。也许它还没有走上依赖于mac特定代码的执行路径 我想我可以在linux设备上运行npm install,但这意味着我们必须有一个可供CI/CD管道使用,这将是一个令人头痛的问题,从长远来看可能不是一个现实的
npm install
,然后将整个代码库、node\u模块
以及所有内容复制到linux设备上。它似乎运行正常,但我不确定它是否会继续这样做。也许它还没有走上依赖于mac特定代码的执行路径
我想我可以在linux设备上运行npm install
,但这意味着我们必须有一个可供CI/CD管道使用,这将是一个令人头痛的问题,从长远来看可能不是一个现实的解决方案
还有什么其他选择?有没有办法强迫npm像在linux ARM机器上一样安装依赖项?我知道你可以使用电子应用程序来实现这一点。对于非电子节点应用程序可以这样做吗
仅供参考,我正在使用以下命令确定是否存在特定于macOS的依赖项:
find node_modules -name "*.node" | xargs file
返回
node_modules/snappy/build/Release/binding.node: Mach-O 64-bit bundle x86_64
您在评论中提到了一个可能的解决方案,但您担心它是特定于容器的。老实说,只要您不是在AWS Lambda这样的无服务器环境中,这可能没什么问题 除此之外或类似的软件包,您明显的选择是在LinuxARM设备上编译(您已经排除了这一点),或者以某种方式摆脱特定于平台的依赖关系。你真的需要吗?您可以不使用压缩或使用较慢的压缩库吗?至于,我相信这只是macOS,不会对其他平台产生影响。你很可能把它看作是一种依赖?似乎你可以忽略这一点
编辑:注释表示
snappy
作为kafka节点的依赖项安装snappy
在kafka节点中是可选的。如果您自己没有指定snappy压缩,那么可能没有使用它。您可以使用--no optional
标志:npm install kafka节点--no optional
尝试使用snappy
压缩将导致运行时错误。这可能允许您在macOS计算机上本地检查是否未使用snappy。如果您只想创建一个可执行文件,那么可能是正确的选择you@BraveButter我看到了那个模块,但在顶部有一个免责声明,上面说免责声明:pkg是为在容器中使用而创建的,而不是适用于无服务器环境。
我不是在容器中运行此功能。谢谢您提供的信息。对snappy
的依赖是由于对kafka节点的直接依赖,该节点必须在其依赖关系树中的某个位置。事实证明,对fsevents
的依赖来自mocha
,这只是开发,所以没问题。我将更新问题以删除该问题。是否可以在ARM设备上下载一次kafka节点
,然后将结果存储在应用程序的代码库中?有点像一个本地存储库,只用于一个包。那么我想您必须以某种方式引用package.json
中的本地文件。如果我们只需要下载并编译一次卡夫卡依赖项,那就可以了。snappy
在kafka节点中是可选的。如果没有指定snappy压缩,则可能没有使用它。使用--no optional
标志:npm install kafka node--no optional
尝试使用snappy
压缩将导致运行时错误,您可以在不使用snappy
的情况下安装kafka节点。这可能允许您在macOS机器上本地检查snappy
是否未被使用。明白了。使用安装--没有可选的会删除snappy,此时尝试使用压缩会导致您所说的错误。我想我会在不使用snappy的情况下安装kafka,并且在发送消息时不使用压缩。谢谢你的帮助。