前端 离线安装npm包的几种方法

butangmucat · February 08, 2020 · 19 hits

这段时间的工作主题就是 Linux
下的 “离线部署”,包括 mongo、mysql、postgresql、nodejs、nginx 等软件的离线部署。平常在服务器上借助 apt-get 就能轻松搞定的事情,在离线环境下就变得异常艰难。上一篇文章讲了使用 snap 离线安装软件的方式,但对于 npm 包怎么离线部署,snap 是无能为力的。本篇文章就来讲一讲离线安装 npm 包的几种方法。

接下来的部分,我将以离线安装 pm2 为例来进行说明。pm2 是一个进程守护程序,用于启动 node 集群和服务进程出错时自动重启,在生产环境下部署 nodejs 应用一般都会使用到。

使用npm link的方式是最常用的方法,具体做法是在联网机器上下载 pm2 的源码并安装好依赖,拷贝到离线服务器上,最后借助npm link将 pm2 链接到全局区域。

首先,将 pm2 的源代码克隆下来:

1
$ git clone https://github.com/Unitech/pm2.git

然后进入到 pm2 项目中,安装好所有的依赖:

1
2
$ cd pm2
$ npm install

将安装好依赖的 pm2 文件夹拷贝到目标服务器上,进入 pm2 目录链接到全局区域:

1
2
$ cd pm2
$ npm link

这种方式最关键的是借助npm link完成链接,但npm link这条命令本意是设计给开发人员调试用的。但开发人员开发某个全局命令工具的时候,通过将命令从本地工程目录链接到全局,这样调试的时候,可以实时查看本地代码在全局环境下的执行情况。所以,npm link的项目需要安装所有的依赖,包括dependencies以及devDependencies,而我们如果只是使用而不是开发某个包的话,正常情况下不应该安装devDependencies

总而言之,这种方式优点是比较简单,缺点是安装了不需要的devDependencies,对于有 “洁癖” 的人是难以忍受的。

使用npm bundle

那有什么方法相比于上一种方法更干净呢?答案是使用 npm-bundle 工具将 pm2 的所有依赖打包,然后到目标服务器上使用npm install <tarball file>安装。

首先在联网机器上安装 npm-bundle 工具:

1
$ npm install -g npm-bundle

然后打包 pm2:

1
$ npm-bundle pm2

上面的命令会生成一个 tgz 的包文件,复制到目标服务器上安装:

1
$ npm 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,不能正确地打包,这时考虑采用第一种方式。

No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.