详解离线安装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实现精美的图片跟随鼠标效果实例
May 16 Javascript
常用jQuery代码分享
Jul 14 Javascript
JS iFrame加载慢怎么解决
May 13 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
JS动态加载脚本并执行回调操作
Aug 24 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 jQuery
js实现微信/QQ直接跳转到支付宝APP打开口令领红包功能
Jan 09 Javascript
jQuery简单判断值是否存在于数组中的方法示例
Apr 17 jQuery
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
利用原生JS实现欢乐水果机小游戏
Apr 23 Javascript
Vue Elenent实现表格相同数据列合并
Nov 30 Vue.js
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
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
Php图像处理类代码分享
2012/01/19 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
初识PHP
2014/09/28 PHP
PHP常见错误提示含义解释(实用!值得收藏)
2016/04/25 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
2016/11/16 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
2017/03/23 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
Python字符遍历的艺术
2008/09/06 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Python中property属性实例解析
2018/02/10 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
numpy中的高维数组转置实例
2018/04/17 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
Jacques Lemans德国:奥地利钟表品牌
2019/12/26 全球购物
Java的类与C++的类有什么不同
2014/01/18 面试题
小学生新学期寄语
2014/01/19 职场文书
《胡杨》教学反思
2014/02/16 职场文书
创先争优活动心得体会
2014/09/04 职场文书
运动会表扬稿
2015/01/16 职场文书
企业宣传稿范文
2015/07/23 职场文书
销售会议开幕词
2016/03/04 职场文书
老生常谈 使用 CSS 实现三角形的技巧(多种方法)
2021/04/13 HTML / CSS
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python