详解离线安装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 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
js判断浏览器是否支持html5
Aug 17 Javascript
jQuery获取父元素及父节点的方法小结
Apr 14 Javascript
JS学习之表格的排序简单实例
May 16 Javascript
JavaScript事件用法浅析
Oct 31 Javascript
javascript判断回文数详解及实现代码
Feb 03 Javascript
js实现适配不同的屏幕大小
Apr 10 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
Element input树型下拉框的实现代码
Dec 21 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
Jun 19 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
让PHP支持断点续传的源码
2010/05/16 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
2016/07/14 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
js实现消息滚动效果
2017/01/18 Javascript
Vue.js用法详解
2017/11/13 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
JS实现随机抽选获奖者
2019/11/07 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
python使用socket连接远程服务器的方法
2015/04/29 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
python 用lambda函数替换for循环的方法
2018/06/09 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
大一自我鉴定范文
2013/10/04 职场文书
旷课检讨书500字
2014/10/14 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书