【问题标题】:How to install npm -g on offline server如何在离线服务器上安装 npm -g
【发布时间】:2012-07-02 22:46:03
【问题描述】:

我需要在离线服务器上安装“全局”npm 应用程序。

安装普通应用很容易:

npm install

然后打包生成的文件。手动或使用 npm pack

但是,如何在没有 Internet 的情况下安装全局应用程序(具有某种安装脚本),例如 forever

npm install -g forever

【问题讨论】:

    标签: node.js offline npm


    【解决方案1】:

    试试npmbox,它是npmzip的新名称,可以让你通过一个文件安装离线npm包

    【讨论】:

    • 我在服务器上安装了 npmbox pn,但是如何使用它安装 pm2?
    • 对不起,但对我不起作用。花了相当多的时间尝试直到停止。确实找到了方法并在下面发布。
    • npmbox 是一个死项目。不要打扰。
    • 我的问题是如何在没有互联网访问的情况下安装 npmbox?
    【解决方案2】:

    您可以从 tarball 文件安装内容,请查看 npm documentation。您可以使用npm view forever dist.tarball 找到永久压缩包的 URL 并下载它。试试这样的:

    curl -so forever.tar.gz `npm view forever dist.tarball 2> /dev/null`
    npm install ./forever.tar.gz -g
    

    但是您可能还必须对所有依赖项都执行此操作。可能有更好的方法,但这是我在搜索中找到的。

    【讨论】:

    • 感谢您的回答。但是,它会立即尝试从 Internet 中获取依赖项。 npm http GET registry.npmjs.org/broadway
    • 当然,您需要先安装任何依赖项。
    • 你是对的加藤。但是怎么做? forever 有很多依赖项。
    【解决方案3】:

    嗯.... 在尝试使用上述引用(npmbox 或离线-npm)一天之后,想出了一些更简单的方法。感谢 npmbox,我不得不说。 这个想法是从具有在线访问权限的实例中保留缓存,然后在离线时使用它。

    在有网络的机器上:

    1 - 清除 npm 缓存:npm cache clear

    2 - 安装包,假设它的 x.y.z:npm install -g **package.x.y.z**

    3 - 将缓存复制到一个文件夹中......让我们随便称呼它(我假设 npm 缓存在根文件夹中,对此不确定): cp -R /.npm/* **/cache-whatever-folder**

    在没有网络的机器上:

    4 - 将此 cache-whatever-folder 带到没有互联网的实例,然后清理缓存并安装它(我不会说明如何复制文件夹:)

    npm cache clear

    npm install --global --cache **/cache-whatever-folder** --optional --cache-min 99999999999 --shrinkwrap false **package.x.y.z**

    完成

    【讨论】:

    • npm-cache 不保证缓存完整或不损坏。这可能是由于自动缓存清理或哈希冲突造成的。 npm-cache 文档说“npm 不保证以前缓存的数据以后可以使用”
    • 我只是复制 npm-cache 文件夹并替换到其他机器吗?我正在使用 Windows,不确定你是如何使用 cp 命令的。如果你能详细说明文件路径,那就太棒了。
    • 是的,@MurtazaHaji,在可以上网的机器上从%AppData%/npm-cache 获取数据,然后复制到没有上网的机器上。
    【解决方案4】:

    离线安装 PM2:-

    在 RHEL-7 上的 Node-v6.10.3 和 Npm-3.10.10 上测试

    转到有互联网连接的机器:-

    #npm install -g npmbox
    #npmbox npmbox
    #scp npmbox.npmbox root@offline-server-ip:.
    

    在没有互联网连接的情况下转到机器:-

    #ssh  root@offline-server-ip 
    #tar --no-same-owner --no-same-permissions -xvzf npmbox.npmbox
    #npm install --global --cache ./.npmbox.cache --optional --cache-min 99999999999 --shrinkwrap false npmbox
    

    转到有互联网连接的机器:-

    #npm install pm2 -g
    #npmbox pm2
    #scp pm2.npmbox root@offline-server-ip:.
    

    在没有互联网连接的情况下转到机器:-

    #npmunbox pm2.npmbox --global
    #pm2 ls
    

    【讨论】:

      【解决方案5】:

      我创建了offline-npm 来以干净的方式安装所有依赖项。对于没有使用 node-gyp 的模块,一切都应该按照描述的方式工作。

      如果您需要 node-gyp(通常在线安装),请考虑将 ~/.node-gyp 复制到该离线机器。

      【讨论】:

        【解决方案6】:

        试试npmzip

        npm install -g npmzip
        npmzip <package>
        

        您将在当前目录中获得压缩包 这可以移动到目标机器并且:

        npmunzip <tarball>
        

        【讨论】:

        • npm 默认可以处理 tar.gz zip git svn manual
        【解决方案7】:

        使用Yarn

        1. 在互联网机器上(配置本地缓存位置):

          yarn config set yarn-offline-mirror ~/yarn-offline-mirror/
          
        2. 在离线机器上(配置本地缓存位置):

          yarn config set yarn-offline-mirror ~/yarn-offline-mirror/
          
        3. 在离线机器上,找出全局安装位置在哪里:

          yarn global bin
          

          (或者用yarn config set prefix &lt;file_path&gt;设置)

        4. 在离线机器上,将其添加到您的路径中。例如:

          echo 'export PATH=$PATH:'"$(yarn global bin)" >> ~/.bashrc  
          source ~/.bashrc # reload
          
        5. 在互联网机器上,下载forever的依赖:

          mkdir new-cli-forever/
          cd new-cli-forever/
          yarn add forever
          

          然后将new-cli-forever/yarn.lock~/yarn-offline-mirror/复制到离线机器上。 (rm -rf new-cli-forever/ 现在可以了。)

        6. 在离线机器上,从本地缓存安装forever

          cp /path/to/imported/yarn.lock .
          cp -n /path/to/imported/yarn-offline-mirror/* ~/yarn-offline-mirror/
          yarn global add --offline forever
          rm -f ./yarn.lock
          

        有关更多信息,请参阅我的帖子:https://assafmo.github.io/2018/04/11/yarn-offline.html

        【讨论】:

        • 首先如何将纱线送到离线机器?
        • 非常感谢,这是该线程唯一对我有用的解决方案。我唯一要说的是,就我而言,我必须在 yarn global add --offline dep 之前运行 yarn --offline 来创建项目。否则,它不起作用
        • 哦,另外,您可以使用此选项强制引擎版本:--ignore-engines。例如, yarn add --ignore-engines dep 在我的情况下,这有助于安装 pm2
        • 嗯。离线服务器如何获取yarn
        【解决方案8】:

        在你的 package.json 中列出 bundledDependencies 中的依赖项,然后运行 ​​npm pack 来创建一个 tarball。把它转移到另一台机器上,然后npm install &lt;tarball&gt;,或者手动破解它。

        https://github.com/npm/npm/issues/1349

        【讨论】:

          【解决方案9】:

          npmbox 已过时

          使用npm pack命令(npm docs),无需安装任何东西。

          单包

          如果你只想要一个包(例如,forever),你可以运行:

          npm pack forever
          

          此命令会将其提取到缓存中,然后将 tarball 以 -.tgz 的形式复制到当前工作目录

          然后,从您创建包的文件夹中,安装它:

          npm install -g ./forever-x.y.z.tgz
          

          整个项目

          如果您想离线安装整个项目,请在您的 package.json 中包含一个名为 bundleDependencies 的属性,并在此字段中列出您需要的所有依赖项。

          // package.json
          
          "dependencies": {
            "archiver": "^2.1.1",
            "axios": "^0.16.2",
            "body-parser": "^1.18.3"
          },
          "bundleDependencies": {
            "archiver": "^2.1.1",
            "axios": "^0.16.2",
            "body-parser": "^1.18.3"
          }
          

          然后运行npm pack

          它将为您的整个项目和依赖项创建一个.tgz 文件。

          您只需将其复制到离线服务器并解压缩即可。

          【讨论】:

            【解决方案10】:

            在你的本地机器或任何有互联网连接的机器上,做

            npm install npm-bundle -g
            npm install forever -g
            

            现在,去cd /usr/local/lib/node_modules/forever

            npm-bundle
            

            它将创建一个.tgz 文件。现在scp/ftp 那个.tgz 文件到离线服务器并执行

            npm install forever -g
            

            参考:This blog

            【讨论】:

            • 遵循所有步骤,仍然 npm install 超时,因为它试图连接到我的生产机器中不允许的 registry.npmjs.org
            【解决方案11】:

            在在线机器上做:

            # change to desired packages
            packages="pm2 yarn"
            for pkg in $packages; do
                mkdir "$pkg"
                curl "$(npm view "$pkg" dist.tarball)" |
                tar -xzC "$pkg" --strip-components 1
                (cd "$pkg" && npm install)
            done
            tar -czf packages.tar.gz $packages
            

            在离线服务器上做:

            npm config set offline
            tar -xzf packages.tar.gz
            npm install -g pm2 yarn
            

            【讨论】:

              猜你喜欢
              • 2021-04-12
              • 2015-12-26
              • 2015-11-04
              • 1970-01-01
              • 2021-05-30
              • 2022-01-18
              • 2017-08-21
              • 2018-05-13
              • 2016-04-08
              相关资源
              最近更新 更多