详解离线安装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知识点收藏
Feb 22 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
JavaScript使用pop方法移除数组最后一个元素用法实例
Apr 06 Javascript
基于JavaScript实现网页倒计时自动跳转代码
Dec 28 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
javascript中获取class的简单实现
Jul 12 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
Nov 30 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
详解Node.JS模块 process
Aug 31 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对象Object的概念 介绍
2012/06/14 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHP微信模板消息操作示例
2017/06/29 PHP
PHP实现的抓取小说网站内容功能示例
2019/06/27 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
ToolTips JQEURY插件之简洁小提示框效果
2011/11/19 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
JavaScript知识点总结(十六)之Javascript闭包(Closure)代码详解
2016/05/31 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
Angular 容器部署的方法
2018/04/17 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
在Python中使用lambda高效操作列表的教程
2015/04/24 Python
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python中的 enum 模块源码详析
2019/01/09 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
python实现简单井字棋小游戏
2020/03/05 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
党员违纪检讨书
2014/02/18 职场文书
黄金酒广告词
2014/03/21 职场文书
工伤事故处理协议书怎么写
2014/10/15 职场文书