如何在离线时安装 npm 包?

Posted

技术标签:

【中文标题】如何在离线时安装 npm 包?【英文标题】:How to install npm package while offline? 【发布时间】:2017-08-21 04:55:54 【问题描述】:

我在离线网络上工作,想使用 npm 安装 angular-cli。 我有一个 angular-cli 的 zip 文件,并使用最新的节点和 npm 版本。 我正在使用命令:npm install ./angular-cli-master 从文件夹中安装 angular-cli。 但我不断收到此错误消息,告诉我我没有互联网连接(没关系)。 那么如何使用从 Github 下载的 zip 在离线时安装这个 angular-cli?

感谢您的帮助。

【问题讨论】:

您确定您的存档也包含 angular-cli 的所有依赖项吗? 我不确定,但现在我看到它正在尝试访问 registry.npmjs.org/webpack-merge。所以我想我必须使用这个文件才能使用 npm 命令。你有什么线索吗? 如果你看angular-cli's package.json你可以看到webpack merge是一个依赖,你需要在安装angular-cli之前安装所有的依赖。由于未安装,npm 尝试从 Internet 获取它,但失败 是否意味着我必须将所有依赖项导入我的封闭网络(离线网络),“npm install”到依赖项,然后npm install angular-cli? 是的,但只要复制node_modules 的内容就足够了,除非你全局安装。另一种可能更简单的方法是在已连接的系统上运行npm install angular-cli,并将node_modules 的内容复制到离线计算机。 【参考方案1】:

您只需将包和所有依赖项复制到您的 node_modules 文件夹中,在项目中进行本地安装,或在全局文件夹中(npm config get prefix 查看它的位置)进行全局安装。

npm install 的行为是检查依赖关系,并首先安装它们。当它没有找到安装它们,也没有找到包含它们的本地文件时,它会尝试下载它们。

由于所有这些步骤都失败(您没有安装依赖项,它在预期位置不可用,并且无法下载),因此安装失败。

你可以在每个模块的package.json中找到依赖列表,但是由于它是递归的,如果你手动进行设置可能需要很长时间,npm通过递归来完成。

对您来说,最简单的方法是在连接的 PC 上创建一个新文件夹,并在其中 npm install angular-cli,压缩该文件夹并将其传输到离线计算机上。

【讨论】:

当然,如果您的包构建原生扩展,这可能不起作用 npm root -g 获取全局node_modules路径【参考方案2】:

2016 年 1 月 - 查看 Addy Osmani 对 offline installation of npm packages 的建议

2017 年 5 月 - as of npm 5,您可以将 --prefer-offline 标志传递给 npm install

yarn 开箱即用。

【讨论】:

【参考方案3】:

在 2019 年,我发现没有推荐的方法适用于无法访问互联网的“气隙”服务器。

我发现唯一的解决方案是,在 Windows 上,以 artillery.io 为例:

    将软件包安装在可以访问 Internet 的机器上,例如本地开发机器。 npm install -g artillery 浏览至C:\Users\username\npm 拉上\node_modules\artillery(例如artillery.7z) 将 zip 和文件 artilleryartillery.cmd(位于 npm 文件夹的根目录)复制到服务器 将artilleryartillery.cmd这两个粘贴到servers npm文件夹的根目录下(C:\Users\serverusername\npm) 解压到C:\Users\serverusername\npm\node_modules

这只是一个工具的复杂版本。如果您本地机器的 npm 文件夹中的工具相对较少,您总是可以压缩整个 npm 文件夹并在服务器上复制 + 解压它。

我仍然认为即使使用npm packnpm install -g <tarfile>,npm 仍坚持尝试连接注册表很奇怪

【讨论】:

我在 windows 上使用 'nvm' 并且安装文件夹不同。建议使用'npm config get prefix'来确定。【参考方案4】:

问题:我遇到过类似的情况,我无法使用 npm 在我的本地计算机(离线)上安装 express.jspackage.json 指定的所有其他依赖项 由于互联网连接不可用。

解决方案:我有一个适用于 Windows(不太确定其他平台)的解决方案,通过它我安装了 express 框架以及我需要的所有依赖项我的项目包括cookie-parserjademorgan 等。


步骤:

    在可以访问 Internet 的远程计算机上安装所有软件包。 在我的情况下,我在远程和本地机器上都使用 Windows,我的要求是在本地机器上安装 express.js。所以我在远程机器上运行下面的命令来安装express.js

    C:\Users>npm install -g express-generator`
    

    安装express.js 后,我在远程机器上使用以下命令创建了一个应用程序:

    C:\Users\Name\Desktop>express Project`
    
    C:\Users\Name\Desktop\Project>npm install -g =>to install all other dependencies globally*
    

    现在浏览到npm的全局模块所在的位置,您可以通过以下方式查看位置

    C:\Users>npm config get prefix
    

    一般在Windows它的

    C:\Users\Username\AppData\Roaming\
    

    只需复制远程计算机的npmnpm-cache 文件夹即可。

    并放置两个复制的文件夹,即。 npmnpm-cache 在同一位置的本地计算机中

    C:\Users\Username\AppData\Roaming\
    

【讨论】:

我在没有缓存文件夹的情况下成功了。同样重要的是在第一台联网机器的全局安装文件夹中,确保复制 npm 文件夹中生成的命令文件(即 depCheck.cmd )【参考方案5】:

简短的回答,你不能。大多数 NPM 包,例如 @angular/cli 需要其他依赖项,而那些需要在运行 npm install 时安装的子依赖项

但是,您可以在网络上安装 cli,并在离线时使用它。

【讨论】:

我认为这就是坏事。但是不会丢失位于 %appdata% 中的文件(在在线电脑中),我也必须移动这些文件? 我认为你不需要任何东西,一旦安装了 cli,它应该可以正常工作并且不需要连接到互联网。但是,如果您计划使用ng new PROJ NAME 创建新项目,您将需要互联网,因为该项目本身需要安装依赖项。如果只使用 ng build、generate 等应该没问题。【参考方案6】:

您可以在此处找到 npm install 命令文档:https://docs.npmjs.com/cli/install

我不太确定,不幸的是,我现在没有机会自己测试它,但我会尝试解压缩文件夹并删除点,如下所示: npm install /angular-cli-master (= 安装文件夹而不是 zip 文件) 或者只是添加这样结尾的 zip 文件: npm install ./angular-cli-master.tgz (= 安装 zip 文件而不是文件夹,文件结尾可能是 .zip 或其他文件)

【讨论】:

【参考方案7】:

在线电脑:

npm install -g offline-npm

将 npm-module 复制到离线计算机就可以了!

【讨论】:

以上是关于如何在离线时安装 npm 包?的主要内容,如果未能解决你的问题,请参考以下文章

即使在离线时如何缓存网页以在我的 android 应用程序中使用

Chrome 在离线时禁用按钮和输入元素

仅在离线时使用 ServiceWorker 缓存

如何在离线 Debian 机器上安装 R 包?

Parse.com 用户在离线时注销

MoPub“onInterstitialFailed”adListener 在离线时不起作用