无法安装 Socket.IO 与互联网断开连接

Unable to install Socket.IO disconnected from internet

我需要在无法访问 Internet 的计算机上安装 Socket.io。

我已经在另一个盒子上下载了 Node.js 和 Socket.IO,但是当我复制并尝试将它们安装到独立的机器上时,Node.js 安装正常,但是 Socket.IO 坚持连接到 GitHub.

如何在没有互联网连接的情况下安装 Socket.IO?我应该离线安装所有依赖项吗?如果是这样,Socket.IO的依赖项是什么?

原来npm是支持包缓存的。基本上你在 确实 可以访问互联网的开发机器上创建一个缓存,在安装 nodejs 应用程序的同时将该缓存复制到你的目标上,然后从缓存中安装包.我从你的问题中假设目标机器已经安装了 nodejs 和 npm。

第 1 步。使用 npm 在您的开发机器上创建缓存目录

首先,创建一个缓存目录并配置 npm 以使用它。然后安装每个包。

mkdir                ../my-cache
npm config set cache ../my-cache
npm install --save async@0.9.0
npm install --save restify@2.8.3
etc.

如果您查看 my-cache 目录,您会看到每个已安装包的子目录。

第 2 步。将缓存与节点应用程序一起复制到目标计算机

这里没有火箭科学:确保将 my-cache 目录复制到目标计算机。

步骤 3. 使用 npm 从缓存中安装包

配置 npm 使用缓存目录。请注意,npm 仍会尝试从互联网上获取包文件。它会在失败后重试。我发现了一些强制 npm 使用缓存的建议,但这些选项不起作用。但我确实找到了一种方法来显着减少 npm 在查看缓存之前尝试获取的时间。

npm config set cache ../my-cache
npm config set fetch-retries 1
npm config set fetch-retry-maxtimeout 1
npm config set fetch-retry-mintimeout 1
npm install async@0.9.0
npm install restify@2.8.3

请注意,您不能只键入 npm install,因为 npm 不会使用缓存。这有点痛苦。如果你想要一个健壮的安装,你可以编写一个小的 nodejs 应用程序来解析依赖项并调用 child_process.exec 来安装每个依赖项。


(*) 我应该提到有一个名为 npm-cache (https://www.npmjs.com/package/npm-cache) 的包。就我而言,npm-cache 不适合我的需要。但你也许可以让它为你工作。