我有一个脚本,可以在启动时自动在 EC2 实例上安装一些 npm 包(特别是 karma,我想用 来安装--global
)。问题是 npm 有时会随机失败,可能是由于网络故障,但我并不完全确定发生了什么。
为了排除网络,我想要做的是下载 npm 的相关文件,并要求它根据我从 S3 下载的文件安装 karma。
但是我该怎么做呢?我该如何告诉 npm 不要从中央存储库抓取文件,而是从其他地方抓取?
答案1
您必须首先npmbox
全局安装模块,此模块会创建一个包含给定模块所有依赖项的离线包。然后您可以使用npmunbox
命令将该包安装到您的离线机器。
要安装 npmbox:npm install -g npmbox
要创建模块的离线包:npmbox -v localtunnel
,它将localtunnel.npmbox
在当前目录中生成一个文件。将其复制到您的离线机器上。
安装离线包:npmunbox localtunnel.npmbox
答案2
我编写了一个简单透明的工具来npm install
使用 npm 的离线缓存
答案3
离线安装 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