我需要在离线服务器上安装“全局”npm 应用程序。
安装普通应用程序很容易:
npm install
然后打包生成的文件。手动或使用npm pack。
但是,我怎样才能安装全局应用程序(具有某种安装脚本),例如永远没有互联网?
npm install -g forever
试试npmbox,它是 npmzip 的新名称,它允许您通过一个文件安装离线 npm 包
您可以从 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
但是您可能也必须对所有依赖项执行此操作。可能有更好的方法,但这是我在搜索中发现的。
好吧......经过一天尝试使其与上述参考(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**
完毕
离线安装 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
我创建了offline-npm来以干净的方式安装所有依赖项。对于没有使用 node-gyp 的模块,一切都应该按照描述的方式工作。
如果您需要node-gyp
(通常在线安装),请考虑将 ~/.node-gyp 复制到该离线机器。
试试npmzip
npm install -g npmzip
npmzip <package>
您将在当前目录中获得 tarball 这可能会被移动到目标机器并且:
npmunzip <tarball>
使用纱线:
在互联网机器上(配置本地缓存位置):
yarn config set yarn-offline-mirror ~/yarn-offline-mirror/
在离线机器上(配置本地缓存位置):
yarn config set yarn-offline-mirror ~/yarn-offline-mirror/
在离线机器上,找出全局安装位置在哪里:
yarn global bin
(或用 设置yarn config set prefix <file_path>
)
在离线机器上,将其添加到您的路径中。例如:
echo 'export PATH=$PATH:'"$(yarn global bin)" >> ~/.bashrc
source ~/.bashrc # reload
在互联网机器上,下载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/
现在可以了。)
在离线机器上,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
列出bundledDependencies
package.json 中的依赖项,然后运行npm pack
以创建 tarball。把它转移到另一台机器上,npm install <tarball>
或者手动破解它。
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
为您的整个项目和依赖项创建一个文件。
您只需将其复制到离线服务器并解压缩即可。
在您的本地计算机或任何具有 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
参考:这篇博客
在在线机器上执行:
# 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