Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何针对特定平台定位节点应用程序_Node.js_Npm_Dependencies - Fatal编程技术网

Node.js 如何针对特定平台定位节点应用程序

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管道使用,这将是一个令人头痛的问题,从长远来看可能不是一个现实的

我有一个节点应用程序,它运行在带有ARM处理器的小型linux设备上。我在macOS中开发,应用程序中存在一些特定于平台的依赖项。现在我只需在mac上运行
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,并且在发送消息时不使用压缩。谢谢你的帮助。