【问题标题】:Are Nodejs modules portable across different Linux distributions?Nodejs 模块可以跨不同的 Linux 发行版移植吗?
【发布时间】:2015-03-07 23:22:53
【问题描述】:

据我所知,一些 node.js 模块依赖于原生操作系统库支持,例如 node-imagimagick。

但是这个问题困扰了我一段时间。

假设在一个 Linux(例如 Ubuntu)中,我有一个 nodejs 应用程序,所有依赖项都通过 npm install 下载,nodejs 应用程序及其依赖项可以简单地复制到另一个操作系统(不同的 linux 发行版,例如 Redhat)并顺利运行,假设后者需要原生库。

会有兼容性问题吗?

我认为真正的问题是npm install 做什么?它是构建操作系统特定的二进制代码还是只下载 javascript 库。

【问题讨论】:

  • npm installnpmjs.org 检索模块,因为它们是由模块作者在那里发布的。所以你不能真正对所有模块做出一般性的陈述。

标签: javascript linux node.js npm


【解决方案1】:

与 imagemagick 示例一样,某些 npm 模块可能具有应用程序外部的依赖项。例如,ZeroMQ npm 模块不会包含 ZeroMQ 二进制文件(或不应该包含)。

如果您希望在 Linux 发行版之间实现完全可移植性,您可以考虑使用 Docker 容器。例如,您可以让 Dockerfile 满足所有先决条件(例如安装 ZeroMQ),然后让您的节点应用程序在该容器内运行。通过这种方式,您可以确保您使用的所有 npm 模块都可以像在您的 linux 发行版上一样工作。

【讨论】:

  • 谢谢。实际上,我们使用的是 docker 容器,我们有 Dockerfile 做 env 配置,以及 npm install。但是,我很好奇 node_modules 是否是可移植的,因为目标 env 已经安装了二进制 deps?
  • 那么答案是否定的,他们不是。正如 laggingreflex 所提到的,npm 模块由任意开发人员发布,并且可能包含未预装在所有 linux 发行版上的第三方二进制依赖项。
  • 所以 npm install 做类似make的事情?你能举一个例子吗?
  • 可能与 make 有相似之处,这取决于你的 Makefile 是做什么的。但我发现它更像 apt-get。举个例子。考虑这个包:npmjs.com/package/zeromq 如果你在 package.json 文件中包含这个 npm 模块作为依赖项,你的应用程序可能在你的机器上运行良好(如果你之前安装了 ZMQ),但是当你的开发人员从 git 获取你的代码时,并且该开发人员以前没有安装 ZMQ,当他/她运行 npm install 时,他们会遇到错误(在 npm 安装时或更糟 - 在运行应用程序时)。
  • 正如我在问题和回复中提到的,服务器已安装所需的所有第三方库,将 node_module 复制到此服务器是否可以正常工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 2012-11-03
  • 2012-03-06
  • 2020-11-30
  • 2017-05-23
  • 1970-01-01
相关资源
最近更新 更多