详解离线安装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 相关文章推荐
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
JavaScript设计模式之工厂模式和构造器模式
Feb 11 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
Sep 19 Javascript
JS中数组与对象的遍历方法实例小结
Aug 14 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
Nov 10 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
Feb 21 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
Jul 30 Javascript
jQuery实现放大镜案例
Oct 19 jQuery
Vue中使用Echarts仪表盘展示实时数据的实现
Nov 01 Javascript
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
Apr 24 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
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
页面中iframe相互传值传参
2009/12/13 Javascript
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
非常漂亮的JS+CSS图片幻灯切换特效
2013/11/20 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
Python实现简单的可逆加密程序实例
2015/03/05 Python
python判断windows系统是32位还是64位的方法
2015/05/11 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
python 3.6.7实现端口扫描器
2019/09/04 Python
python编写计算器功能
2019/10/25 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
2021/01/27 Python
文员自我评价怎么写
2013/09/19 职场文书
教师个人鉴定材料
2014/02/08 职场文书
店面销售职位的职责
2014/03/09 职场文书
个人收入证明模板
2014/09/18 职场文书
英语教师个人总结
2015/02/09 职场文书
大学生自荐书范文
2015/03/05 职场文书
实习单位推荐信
2015/03/27 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
Python控制台输出俄罗斯方块移动和旋转功能
2021/04/18 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
SQL Server中搜索特定的对象
2022/05/25 SQL Server