如何在离线时安装 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 和文件 artillery
、artillery.cmd
(位于 npm 文件夹的根目录)复制到服务器
将artillery
、artillery.cmd
这两个粘贴到servers npm文件夹的根目录下(C:\Users\serverusername\npm
)
解压到C:\Users\serverusername\npm\node_modules
这只是一个工具的复杂版本。如果您本地机器的 npm 文件夹中的工具相对较少,您总是可以压缩整个 npm
文件夹并在服务器上复制 + 解压它。
我仍然认为即使使用npm pack
和npm install -g <tarfile>
,npm 仍坚持尝试连接注册表很奇怪
【讨论】:
我在 windows 上使用 'nvm' 并且安装文件夹不同。建议使用'npm config get prefix'来确定。【参考方案4】:问题:我遇到过类似的情况,我无法使用 npm 在我的本地计算机(离线)上安装 express.js
和 package.json
指定的所有其他依赖项 由于互联网连接不可用。
解决方案:我有一个适用于 Windows(不太确定其他平台)的解决方案,通过它我安装了 express
框架以及我需要的所有依赖项我的项目包括cookie-parser
、jade
、morgan
等。
步骤:
在可以访问 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\
只需复制远程计算机的npm
和npm-cache
文件夹即可。
并放置两个复制的文件夹,即。 npm
和 npm-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 包?的主要内容,如果未能解决你的问题,请参考以下文章