30

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

安装普通应用程序很容易:

npm install

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

但是,我怎样才能安装全局应用程序(具有某种安装脚本),例如永远没有互联网?

npm install -g forever
4

11 回答 11

20

试试npmbox,它是 npmzip 的新名称,它允许您通过一个文件安装离线 npm 包

于 2013-10-29T18:51:14.957 回答
19

您可以从 tarball 文件安装东西,查看npm 文档。你可以找到永久压缩包的 URLnpm view forever dist.tarball并下载它。尝试这样的事情:

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

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

于 2012-07-02T14:05:19.440 回答
7

好吧......经过一天尝试使其与上述参考(npmbox 或离线-npm)一起工作后,想出了一些更简单的方法。感谢 npmbox,我不得不说。这个想法是从具有在线访问权限的实例中保留缓存,然后在离线实例中使用它。

在有互联网的机器上:

1 - 清除 npm 缓存:npm cache clear

2 - 安装包,让我们说它的 xyz:npm install -g **package.x.y.z**

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

在没有互联网的机器上:

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

npm cache clear

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

完毕

于 2017-05-04T21:47:04.197 回答
5

离线安装 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
于 2017-07-17T12:07:02.740 回答
4

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

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

于 2014-12-20T09:09:39.387 回答
3

试试npmzip

npm install -g npmzip
npmzip <package>

您将在当前目录中获得 tarball 这可能会被移动到目标机器并且:

npmunzip <tarball>
于 2013-08-14T13:38:01.707 回答
3

使用纱线

  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 <file_path>

  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

于 2018-04-14T13:28:42.737 回答
2

列出bundledDependenciespackage.json 中的依赖项,然后运行npm pack以创建 tarball。把它转移到另一台机器上,npm install <tarball>或者手动破解它。

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

于 2015-10-09T16:02:44.107 回答
2

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为您的整个项目和依赖项创建一个文件。

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

于 2019-07-05T06:35:19.120 回答
0

在您的本地计算机或任何具有 Internet 连接的计算机上,执行

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

参考:这篇博客

于 2019-05-27T09:13:17.477 回答
0

在在线机器上执行:

# 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-03-25T21:52:19.570 回答