【发布时间】:2012-07-02 22:46:03
【问题描述】:
我需要在离线服务器上安装“全局”npm 应用程序。
安装普通应用很容易:
npm install
然后打包生成的文件。手动或使用 npm pack。
但是,如何在没有 Internet 的情况下安装全局应用程序(具有某种安装脚本),例如 forever?
npm install -g forever
【问题讨论】:
我需要在离线服务器上安装“全局”npm 应用程序。
安装普通应用很容易:
npm install
然后打包生成的文件。手动或使用 npm pack。
但是,如何在没有 Internet 的情况下安装全局应用程序(具有某种安装脚本),例如 forever?
npm install -g forever
【问题讨论】:
试试npmbox,它是npmzip的新名称,可以让你通过一个文件安装离线npm包
【讨论】:
您可以从 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
但是您可能还必须对所有依赖项都执行此操作。可能有更好的方法,但这是我在搜索中找到的。
【讨论】:
嗯.... 在尝试使用上述引用(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**
完成
【讨论】:
%AppData%/npm-cache 获取数据,然后复制到没有上网的机器上。
离线安装 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 复制到该离线机器。
【讨论】:
使用Yarn:
在互联网机器上(配置本地缓存位置):
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
【讨论】:
yarn?
在你的 package.json 中列出 bundledDependencies 中的依赖项,然后运行 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 文件。
您只需将其复制到离线服务器并解压缩即可。
【讨论】:
在你的本地机器或任何有互联网连接的机器上,做
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
【讨论】:
在在线机器上做:
# 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
【讨论】: