详解离线安装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 相关文章推荐
基于JQuery的密码强度验证代码
Mar 01 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
JavaScript对象反射用法实例
Apr 17 Javascript
JavaScript编程中布尔对象的基本使用
Oct 25 Javascript
JS模仿手机端九宫格登录功能实现代码
Apr 28 Javascript
jquery插件bootstrapValidator数据验证详解
Nov 09 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
深入理解vue-class-component源码阅读
Feb 18 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 Javascript
JS实现拖动模糊框特效
Aug 25 Javascript
使用TS来编写express服务器的方法步骤
Oct 29 Javascript
Ant Design的可编辑Tree的实现操作
Oct 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 preg_replace替换实例讲解
2013/11/04 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
jQuery实现最简单实用的分秒倒计时
2017/02/05 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
python 判断一个进程是否存在
2009/04/09 Python
Python列表生成器的循环技巧分享
2015/03/06 Python
python数组过滤实现方法
2015/07/27 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python3个性签名设计实现代码
2018/06/19 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
解除劳动合同协议书
2014/04/14 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
2019中秋节祝福语大全,提前收藏啦
2019/09/10 职场文书
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技