详解离线安装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 相关文章推荐
SyntaxHighlighter代码加色使用方法
Sep 07 Javascript
Whatever:hover 无需javascript让IE支持丰富伪类
Jun 29 Javascript
javascript作用域容易记错的两个地方分析
Jun 22 Javascript
原生js和jQuery随意改变div属性style的名称和值
Oct 22 Javascript
jQuery基于Ajax方式提交表单功能示例
Feb 10 Javascript
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
元素全屏的设置与监听实例
Nov 28 Javascript
Vue精简版风格指南(推荐)
Jan 30 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
Aug 14 Javascript
vue实现移动端返回顶部
Oct 12 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脚本过滤用户上传的图片
2015/07/03 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
js保存当前路径(cookies记录)
2010/12/14 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
js学使用setTimeout实现轮循动画
2017/07/17 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
Angular 开发学习之Angular CLI的安装使用
2017/12/31 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Django框架使用内置方法实现登录功能详解
2019/06/12 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
公司董事长职责
2013/12/12 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
党员承诺书范文
2014/05/19 职场文书
投标承诺书怎么写
2014/05/24 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android