【问题标题】:How to install npm package while offline?如何在离线时安装 npm 包?
【发布时间】: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 的内容复制到离线计算机。

标签: node.js npm visual-studio-code angular-cli


【解决方案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 为例:

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


    步骤:

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

      C:\Users>npm install -g express-generator`
      
    2. 安装express.js 后,我在远程机器上使用以下命令创建了一个应用程序:

      C:\Users\Name\Desktop>express Project`
      
      C:\Users\Name\Desktop\Project>npm install -g =>to install all other dependencies globally*
      
    3. 现在浏览到npm的全局模块所在的位置,您可以通过以下方式查看位置

      C:\Users>npm config get prefix
      

      一般在Windows它的

      C:\Users\{Username}\AppData\Roaming\
      
    4. 只需复制远程计算机的npmnpm-cache 文件夹即可。

    5. 并放置两个复制的文件夹,即。 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 复制到离线计算机就可以了!

      【讨论】:

        猜你喜欢
        • 2012-06-20
        • 2021-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多