离线安装 npm 包的三种方式(备用)
pm2 是一个进程守护程序,用于启动 node 集群和服务进程出错时自动重启,在生产环境下部署 nodejs 应用一般都会使用到,本文以离线安装 pm2 为例来进行 npm 包离线安装的说明。
使用 npm link
使用 npm link
的方式是最常用的方法,具体做法是在联网机器上下载 pm2 的源码并安装好依赖,拷贝到离线服务器上,最后借助 npm link
将 pm2 链接到全局区域。
首先,将 pm2 的源代码克隆下来:
1git clone https://github.com/Unitech/pm2.git
然后进入到 pm2 项目中,安装好所有的依赖:
1cd pm2
2npm install
将安装好依赖的 pm2 文件夹拷贝到目标服务器上,进入 pm2 目录链接到全局区域:
1cd pm2
2npm link
这种方式最关键的是借助 npm link
完成链接,但 npm link
这条命令本意是设计给开发人员调试用的。但开发人员开发某个全局命令工具的时候,通过将命令从本地工程目录链接到全局,这样调试的时候,可以实时查看本地代码在全局环境下的执行情况。所以,npm link
的项目需要安装所有的依赖,包括 dependencies
以及 devDependencies
,而我们如果只是使用而不是开发某个包的话,正常情况下不应该安装 devDependencies
。总而言之,这种方式优点是比较简单,缺点是安装了不需要的 devDependencies
。
使用 npm install <folder>
有什么方法相比于上一种方法更干净呢?答案是 npm install <folder>
直接从文件夹安装。同样以 pm2 为例,首先我们需要准备 pm2 包,可以在联网的机器上执行:
1npm install pm2 --global-style
上面的 --global-style
很关键,表示将 pm2 安装到 node_modules 中一个单独的 pm2 文件夹中,这样我们可以方便地将 pm2 及其所有相关依赖都拷贝出来。也可以使用 npm install pm2 -g
安装到全局的 node_modules,其文件布局是一样。然后,将 pm2 文件拷贝到目标机器上,使用以下命令安装:
1npm install pm2/ -g
这种方式不需要安装多余的 devDependencies
,并且不需要克隆 pm2 的源码,比第一种方法更干净环保。
使用 npm bundle
那有什么方法相比于上一种方法更干净呢?答案是使用 npm-bundle 工具将 pm2 的所有依赖打包,然后到目标服务器上使用 npm install <tarball file>
安装。首先在联网机器上安装 npm-bundle 工具:
1npm install -g npm-bundle
然后打包 pm2:
1npm-bundle pm2
上面的命令会生成一个 tgz 的包文件,复制到目标服务器上安装:
1npm install -g ./pm2-3.2.2.tgz
npm-bundle 的本质是借助 npm pack
来实现打包的。npm pack
会打包包本身以及 bundledDependencies
中的依赖,npm-bundle 则是将 pm2 的所有 dependencies
记录到 bundledDependencies
,来实现所有依赖的打包。
这种方式不需要安装多余的 devDependencies
,并且不需要克隆 pm2 的源码。但需要注意:npm-bundle
对于 scoped packages 的处理有 bug,不能正确地打包,这时考虑采用第一种方式。
使用镜像 CNPM
1、安装 cnpm
1npm i -g cnpm --registry=https://registry.npmmirror.com
2、然后就可以 cnpm 安装依赖包了
1cnpm i -g vue vue-cli
3、cnpm config ls 查看
会发现里面的 registry 变成了淘宝的镜像(仓库):https://registry.npmmirror.com
使用原始 npm
1、npm 临时使用淘宝镜像安装依赖包
1npm i -g express --registry https://registry.npmmirror.com
2、npm 持久使用淘宝镜像安装依赖包
1npm config set registry https://registry.npmmirror.com
2npm i -g express
注意,不推荐这样,因为把 npm 的镜像完全设为了淘宝的镜像,万一我们有些依赖包只有 npm 原始镜像里面才有,而淘宝里面没有,那就悲剧了。所以分开 npm 和 cnpm 是最好的。
NPM 常用设置
1、查看【npm 与 cnpm 是 2 个不同的】
1npm config ls
2cnpm config ls
2、设置:主要是设置 cache
和 prefix
1npm cofig set cache "D:\Nodejs\node_cache"
2npm cofig set prefix "D:\Nodejs\node_global"
3
4cnpm cofig set cache "D:\Nodejs\node_cache"
5cnpm cofig set prefix "D:\Nodejs\node_global"
参见: