详解离线安装npm包的几种方法


Posted in Javascript onNovember 25, 2018

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

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

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

使用 npm link

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

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

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

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

$ cd pm2
$ npm install

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

$ cd pm2
$ npm link

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

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

使用 npm install <folder>

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

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

$ npm install pm2 --global-style

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

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

$ npm install pm2/ -g

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

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

Javascript 相关文章推荐
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
jQuery操作Select选择的Text和Value(获取/设置/添加/删除)
Mar 06 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
给angular加上动画效遇到的问题总结
Feb 17 Javascript
javascript实现列表切换效果
May 02 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
May 03 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
Jul 18 jQuery
JavaScript实现获取select下拉框中第一个值的方法
Feb 06 Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 Javascript
JS中使用cavas截图网页并解决跨域及模糊问题
Nov 13 Javascript
JS实现简单的表格增删
Jan 16 Javascript
vue将单页面改造成多页面应用的方法
Nov 25 #Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 #Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
Nov 25 #Javascript
详解Vue CLI 3.0脚手架如何mock数据
Nov 23 #Javascript
详解js静态检查工具eslint配置文件
Nov 23 #Javascript
详解小程序不同页面之间通讯的解决方案
Nov 23 #Javascript
创建echart多个联动的示例代码
Nov 23 #Javascript
You might like
php实现的在线人员函数库
2008/04/09 PHP
php zip文件解压类代码
2009/12/02 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
php实现的简单检验登陆类
2015/06/18 PHP
PHP的消息通信机制测试实例
2016/11/10 PHP
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
Bootstrap精简教程
2015/11/27 Javascript
AngularJS实现全选反选功能
2015/12/08 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python操作日期和时间的方法
2014/03/11 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python运行其他程序的实现方法
2017/07/14 Python
python实现最长公共子序列
2018/05/22 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
人事助理岗位职责
2013/11/18 职场文书
初中作文评语大全
2014/04/23 职场文书
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
领导班子个人查摆问题对照检查材料
2014/10/02 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
导游词之青岛崂山
2019/12/27 职场文书