js_脚本之家

这段时间的工作主题就是Linux

我当前使用的是Centos7

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

首先在官网查看当前最新的版本

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

https://nodejs.org/dist/

使用 npm link

金沙js8331,移动到目录

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

cd /usr/local/

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

下载包

$ git clone https://github.com/Unitech/pm2.git
wget https://nodejs.org/dist/v9.1.0/node-v9.1.0-linux-x64.tar.gz

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

下载完成后解压

$ cd pm2$ npm install
tar zxvf node-v9.1.0-linux-x64.tar.gz

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

重命名为node

$ cd pm2$ npm link
mv node-v9.1.0-linux-x64 node

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

配置环境变量

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

vim /etc/profile
source /etc/profile

使用 npm install

在最后边添加

那有什么方法相比于上一种方法更干净呢?答案是 npm install
直接从文件夹安装。

#set for nodejs  
export NODE_HOME=/usr/local/node  
export PATH=$NODE_HOME/bin:$PATH  

同样以pm2为例,首先我们需要准备pm2包,可以在联网的机器上执行:

使用命令查看版本,出现相应版本号则表示成功

$ npm install pm2 --global-style
node -v
npm -v

上面的 –global-style
很关键,表示将pm2安装到node_modules中一个单独的pm2文件夹中,这样我们可以方便地将pm2及其所有相关依赖都拷贝出来。也可以使用
npm install pm2 -g 安装到全局的node_modules,其文件布局是一样。

启动nodeJS项目
cd到指定的nodejs项目目录中(package.json所在目录)
npm install
npm start

然后,将pm2文件拷贝到目标机器上,使用以下命令安装:

npm2 安装

(1)如果可以联网
直接执行:npm install -g pm2
(2)如果不能联网
参考:http://blog.csdn.net/chenxiao_zhl/article/details/48180193
首先,找一台可以在线安装pm2的机器
执行 npm install pm2 -g 安装pm2
执行 npm config get prefix
看一下这台机器的npm默认全局安装目录在哪,然后去这个目录下面的
lib/node_modules/下就能看到你刚刚安装的pm2程序;例如如果显示
/usr/local/node, 则去 /usr/local/node/lib/node_modules/下面找到pm2

执行tar czvf pm2.tar.gz pm2/ 命令,
把pm2打包,在这里打包的好处,是因为该目录下面已经包含了pm2依赖的所有node模块
把打出来的包,通过内网传送到要部署的服务器上
(3)报错处理
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0
(node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for
fsevents@1.0.14: wanted {“os”:”darwin”,”arch”:”any”} (current:
{“os”:”linux”,”arch”:”x64″})
还是自己来吧,最主要的原因还是在NPM上,因为用了n来管理nodejs的版本,npm依赖的是nodejs,而n管理node的版本时因为也要依赖node所以有时候会出现一些问题,去找了一下tj大神的n发布页面,上面提到在使用n来切换版本之后,需要修复一下node与npm之间的关系,否则npm很可能出现问题。即在使用完n切换版本之后,需要运行以下脚本,来修复npm
$ curl -0 -L https://npmjs.org/install.sh | sudo sh
视你终端的配置,取舍后面的sudo
参考:https://segmentfault.com/q/1010000007163713
https://github.com/tj/n
登录部署服务器
同样执行 npm config get prefix 看一下这台服务器的npm默认安装目录,
例如目录为 /usr/local/node
执行命令 cd /usr/local/node/lib/node_modules/
拷贝你的 pm2.tar.gz 到该目录下
tar xvf pm2.tar.gz
到这一步,你已经可以使用 /usr/local/node/lib/node_modules/pm2/bin/pm2
执行pm2的命令了, 下面就是把这个命令加到系统环境中
cd /usr/bin
ln -s /usr/local/node/lib/node_modules/pm2/bin/pm2 pm2
这样,就可以直接使用pm2命令来各种操作了

$ npm install pm2/ -g

这种方式不需要安装多余的 devDependencies
,并且不需要克隆pm2的源码,比第一种方法更干净环保。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

发表评论

电子邮件地址不会被公开。 必填项已用*标注