详解离线安装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 相关文章推荐
js利用div背景,做一个竖线的效果。
Nov 22 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
May 19 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
JQuery validate插件验证用户注册信息
May 11 Javascript
js实现年月日表单三级联动
Apr 17 Javascript
Vue学习笔记进阶篇之过渡状态详解
Jul 14 Javascript
深入理解JS的事件绑定、事件流模型
May 13 Javascript
详解ES6系列之私有变量的实现
Nov 21 Javascript
Vue 2.0 中依赖注入 provide/inject组合实战
Jun 20 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
Sep 23 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
2020淘宝618理想生活列车自动领喵币js脚本的代码
Jun 02 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
一个多文件上传的例子(原创)
2006/10/09 PHP
PHP防止表单重复提交的几种常用方法汇总
2014/08/19 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
js 目录列举函数
2008/11/06 Javascript
javascript 写类方式之七
2009/07/05 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
纯JS实现轮播图
2017/02/22 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
Python字符串替换实例分析
2015/05/11 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
pandas.loc 选取指定列进行操作的实例
2018/05/18 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
卡骆驰新加坡官网:Crocs新加坡
2018/06/12 全球购物
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
美国精油公司:Plant Therapy
2019/05/17 全球购物
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
地球一小时宣传标语
2014/06/24 职场文书
“四风”问题整改措施和努力方向
2014/09/20 职场文书
2015年化验员工作总结
2015/04/10 职场文书
教师远程研修感悟
2015/11/18 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
纪检干部学习心得体会
2016/01/23 职场文书