如何在离线情况下安装npm包?

61

我正在使用离线网络,并希望使用npm安装angular-cli。我有angular-cli的zip文件,并且使用最新的node和npm版本。我正在使用以下命令:npm install ./angular-cli-master从文件夹中安装angular-cli。但是我一直收到错误提示我没有互联网连接(这没关系)。那么我如何在离线情况下使用我从Github下载的zip安装angular-cli呢?

谢谢您的帮助。


你确定你的存档文件包含了 angular-cli 的所有依赖吗? - DrakaSAN
我不确定,但现在我看到它正在尝试访问https://registry.npmjs.org/webpack-merge。所以我猜我必须使用这个文件才能使用npm命令。你有任何线索吗? - Dorni
1
是的,但简单地复制node_modules的内容应该足够了,除非你进行全局安装。另一种可能更简单的方法是在一个已连接的系统上运行 npm install angular-cli ,然后将 node_modules 的内容复制到离线计算机。 - DrakaSAN
问题仍然存在于全局安装的操作方法上。有谁可以解决吗? - HelmiB
你可能正在寻找这个吗?https://www.npmjs.com/package/npm-install-offline?activeTab=readme - Matt
显示剩余2条评论
8个回答

44

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

npm install的行为是先检查依赖项,然后进行安装。当它发现依赖项未安装,也没有找到包含依赖项的本地文件时,它会尝试下载依赖项。

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

你可以在每个模块的package.json中找到依赖项列表,但由于它是递归的,如果手动处理可能需要很长时间来正确设置所有内容,npm会通过递归处理。

对于你来说,最简单的方法是在已连接的计算机上创建一个新文件夹,在其中运行npm install angular-cli命令,然后将该文件夹压缩并传输到离线机器上。


晚些时候编辑:如果您需要将此过程工业化,您还可以设置类似verdaccio(私有npm服务器)的东西,下载所有依赖项,使verdaccio填充其缓存,并将缓存复制到空气隔离的服务器上并在那里运行verdaccio,然后再进行安装。
这种方法的主要优点之一是,只要缓存中有包,您就可以随意重新安装(),需要本地编译的软件包也能够正确地安装。

7
如果你的软件包构建本地扩展,那么这种方法可能行不通。 - sebpiq
4
使用命令npm root -g可以获取全局node_modules路径。 - Tawfik Nasser

31

5
2019年,我发现没有任何一种推荐的方法适用于没有互联网访问权限的"气隙"服务器。
我发现唯一的解决方法是,在Windows上使用artillery.io作为示例:
  1. 在具有Internet访问权限的机器(例如本地开发机器)上安装软件包。 npm install -g artillery
  2. 浏览到 C:\Users\{username}\npm
  3. 压缩\node_modules\artillery (例如artillery.7z)
  4. 将zip和文件artillery,artillery.cmd(在npm文件夹的根目录)复制到服务器上
  5. 将两个artillery,artillery.cmd粘贴到服务器npm文件夹的根目录下(C:\Users\{serverusername}\npm)
  6. 将zip解压到C:\Users\{serverusername}\npm\node_modules
这只是一个工具的复杂版本。如果本地机器的npm文件夹相对较少,您可以随时将整个npm文件夹压缩并复制+提取到服务器上。
我仍然认为很奇怪,即使在使用npm packnpm install -g <tarfile>时,npm仍然坚持尝试连接到注册表。

我在Windows上使用“nvm”,安装文件夹不同。建议使用“npm config get prefix”来确定。 - Peter L
安装在{username}/npm中的软件包包含对全局安装artillery的机器的路径引用。不管是否有路径,它都能正常工作吗? - Eliezer Cazares

3
问题: 我曾遇到过类似的情况,无法在本地机器上(离线)使用npm安装express.jspackage.json指定的所有其他依赖项,因为没有网络连接。

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


步骤:

  1. Install all the package(s) on a remote machine which has an internet access.
    In my case I'm using Windows on both remote as well as local machines and my requirement was of installation of express.js on local machine . So I run below command on my remote machine to install express.js

    C:\Users>npm install -g express-generator`
    
  2. After installation of express.js I created an app on my remote machine using:

    C:\Users\Name\Desktop>express Project`
    
    C:\Users\Name\Desktop\Project>npm install -g =>to install all other dependencies globally*
    
  3. Now browse to location where npm's global modules are stored, you can view the location by

    C:\Users>npm config get prefix
    

    Generally in Windows its

    C:\Users\{Username}\AppData\Roaming\
    
  4. Simply copy the npm and npm-cache folder of your remote machine.

  5. And place both copied folders viz. npm and npm-cache into your local machine on same location thats

    C:\Users\{Username}\AppData\Roaming\
    

我在没有缓存文件夹的情况下成功了。同样重要的是,在第一台有互联网的机器的全局安装文件夹中,确保复制生成的命令文件(即depCheck.cmd)到npm文件夹内。 - JesseBoyd

2

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

但是,当连接到网络时可以安装cli,并且在离线时使用它。


我想这就是我要做的。但是在在线电脑上,%appdata% 中不会有丢失的文件,我也需要移动这些文件吗? - Dorni
1
我认为你不需要任何东西,一旦CLI安装完成,它应该可以正常工作,而且不需要连接到互联网。但是,如果你计划使用 ng new PROJ NAME 创建新项目,那么你需要连接互联网,因为该项目本身需要安装依赖项。如果只使用ng build、generate和其他功能,则应该没有问题。 - Ahmed Musallam

0

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

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


0

使用 node 18.x.x 测试成功。

以下是安装 http-server 包的步骤:

  • 在线电脑: npm install -g http-server 安装完成后,复制 http server 文件夹。 (通常位于:C:\Users[用户名]\AppData\Roaming\npm\node_modules)
  • 离线电脑:
    • 粘贴 http-server 文件夹。 例如:D:\http-server
    • npm install -g D:\http-server

-2

在线电脑:

npm install -g offline-npm

将npm模块复制到离线计算机,就这样!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接