一、场景/用途

前端代理的用途,相信大家都清楚。应用场景很多,如——

. 将线上的静态资源文件(JS、CSS、图片)替换为本地相应的文件,来调试线上(代码都被压缩过)的问题;
. 本地开发过程,当后端接口未就绪的情况下(也就是前端和后端同学并行开发),将AJAX接口映射于本地文件;
. 将测试环境或者线上环境的AJAX接口的数据映射于本地,反过来说,也就是开启本地的服务,本地的服务拉取的数据来自测试环境或者线上环境的数据(因为此时测试环境或者线上环境的服务比较稳定,还有,主要此时,测试同学基本都是基于测试环境来注明bug,所以此时可以直接将测试环境的数据来模拟本地拉取的数据,而不是用于自己模拟一套本地数据)

上述三个场景比较普遍,需要做代理映射的方面基本在后端服务接口及静态资源(页面代理当然也是可以,只不过场景不多)。

二、工具介绍

直接上官网吧,https://github.com/goddyZhao/nproxy,在git上搜索nproxy,会出现不少五花八门的nproxy,可别用错。来自作者GoddyZhao,牛叉的不得了。

基于node的代理服务工具,具体原理,我也不知,暂时停留在应用的阶段,能好好把它应用到极致,也是一个收获。

从官网中,作者提到几款流行的代理工具。下面是这些流行代理工具的对比图:

当然,上面的列举中我个人并没有真正去用过除了fiddler和nproxy之外的代理,当然还有一个web服务器nginx同样可以当做前端代理工具来使用。

如作者所说,nproxy的优势主要在这三个方面——

A: 支持Mac、Linux以及windows
D: 支持多个文件合并一个文件的替换
E: 支持目录替换

大家可以根据它的优势,可以适当的去做本地及线上文件的映射关系(可以用流行构建工具如Grunt、Gulp、Webpack、Fis等),来最大化呈现代理工具nproxy的优势。

至于,nproxy的具体使用,在这儿不copy了。主要注意要对浏览器使用代理进行端口配置,个人推荐chrome来去做,安装个chrome的代理工具插件会更加方便(如ProxySwitchySharp)。

下面是代理文件配置的模板文件

module.exports = [

  // 1. replace single file with local one
{
pattern: 'homepage.js', // Match url you wanna replace
responder: "/home/goddyzhao/workspace/homepage.js"
}, // 2. replace single file with web file
{
pattern: 'homepage.js', // Match url you wanna replace
responder: "http://www.anotherwebsite.com/assets/js/homepage2.js"
}, // 3. replace combo file with src with absolute file path
{
pattern: 'group/homepageTileFramework.*.js',
responder: [
'/home/goddyzhao/workspace/webapp/ui/homepage/js/a.js',
'/home/goddyzhao/workspace/webapp/ui/homepage/js/b.js',
'/home/goddyzhao/workspace/webapp/ui/homepage/js/c.js'
]
}, // 4. replace combo file with src with relative file path and specified dir
{
pattern: 'group/homepageTileFramework.*.js',
responder: {
dir: '/home/goddyzhao/workspace/webapp/ui/homepage/js',
src: [
'a.js',
'b.js',
'c.js'
]
}
}, // 5. Map server image directory to local image directory
{
pattern: 'ui/homepage/img', // must be a string
responder: '/home/goddyzhao/image/' //must be a absolute directory path
}, // 6. Write responder with regular expression variables like $1, $2
{
pattern: /https?:\/\/[\w\.]*(?::\d+)?\/ui\/(.*)_dev\.(\w+)/,
responder: 'http://localhost/proxy/$1.$2'
}, // 7. Map server image directory to local image directory with regular expression
// This simple rule can replace multiple directories to corresponding locale ones
// For Example,
// http://host:port/ui/a/img/... => /home/a/image/...
// http://host:port/ui/b/img/... => /home/b/image/...
// http://host:port/ui/c/img/... => /home/c/image/...
// ...
{
pattern: /ui\/(.*)\/img\//,
responder: '/home/$1/image/'
}
];

三、使用体验

根据我们常碰到的场景,举几个例子——

单文件映射:

{
pattern: 'http://test-qian.genshuixue.com/asset/js/registerCard_68edda4ec0.js',
responder: '/Users/bjhl/Desktop/workplace/qianqian-frontend/asset/js/registerCard.js' //must be a absolute directory path
}

要注意,要写本地文件的绝对路径。

映射目录:

{
pattern: /asset\/js/,
responder: '/Users/bjhl/Desktop/workplace/qianqian-frontend/output/asset/js/'
}

这个的应用场景,加入我的本地构建一次项目代码(非压缩版本),如果测试环境的代码同样没有压缩,那么我就可以顺利使用本地目录映射了。如果测试环境的代码是压缩过(这里我简单讲一下使用md5的方式)的,通过正则来进行映射——

{
pattern: /^http:\/\/test-qian.genshuixue.com\/asset\/js\/(.*)_\w{10}.js$/,
responder: '/Users/bjhl/Desktop/workplace/qianqian-frontend/output/asset/js/$1.js'
}

上面仅仅映射js文件,如果我想要同时样式asset目录项目的css文件,没有问题,如下配置——

{
pattern: /^http:\/\/test-qian.genshuixue.com\/asset\/(.*)_\w{10}\.(js|css)$/,
responder: '/Users/bjhl/Desktop/workplace/qianqian-frontend/asset/$1.$2'
}

玩儿好正则表达式,怎么美妙的映射方式你都可以构建。

对于多文件的映射方式,对于简单的js文件拼接方式,还行,否则,就要考虑文件的顺序了。这里举个小例子:

{
pattern: 'http://test-tianyan.genshuixue.com/src/dep/base.js',
responder: [
'../js-common/dep/requirejs/require.min.js',
'../js-common/dep/angular/angular-1.2.16.js',
'../js-common/dep/angular-ui-router/release/angular-ui-router.js',
'../js-common/dep/angular/ui-bootstrap-tpls-0.11.2.js'
]
}

对nproxy的使用过程,下面截个图说明一下:

对于nproxy,启动一次就可以了。它会监控配置文件的实施变更。也就是上面的[WARN]。上面的[INFO]代表匹配成功的请求路径。[ERROR]代表网络异常或者匹配规则配置错误,需要重新配置匹配规则。

一般情况下,建议nproxy的配置文件(如nproxy-conf.js)放在项目工程同级目录下,没有其他好处,维护方便而已。

OK,对于nproxy的使用体验就写这么多。

跨平台前端代码调试神器,大家试试。

前端代理nproxy的更多相关文章

  1. nginx配置前端代理

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  2. NGINX前端代理TOMCAT取真实客户端IP

    nginx前端代理tomcat取真实客户端IP 使用Nginx作为反向代理时,Tomcat的日志记录的客户端IP就不在是真实的客户端IP,而是Nginx代理的IP.要解决这个问题可以在Nginx配置一 ...

  3. 一键前端代理,一行命令开启nginx容器,代理前端页面

    我们在前端开发的过程中,在对接口时候,往往需要跨域请求,那么及其简便的方法就是使用nginx反向代理,但是存在几点缺点 1.在新的一个项目下,我们需要找到安装nginx目录的nginx.conf文件并 ...

  4. nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token

    nginx 1.15.10 前端代理转发 将多个地址,代理转发到一个地址和端口 多系统公用一个cookie 统一token 注意: proxy_pass http://192.168.40.54:22 ...

  5. 运用 node + express + http-proxy-middleware 实现前端代理跨域的 详细实例哦

    一.你需要准备的知识储备 运用node的包管理工具npm 安装插件.中间件的基本知识: 2.express框架的一些基础知识,知道如何建立一个小的服务器:晓得如何快速的搭建一个express框架小应用 ...

  6. vue.config.js配置前端代理

    // vue.config.js 配置说明 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions // 这 ...

  7. 前端代理----whistle

    场景一:如何将本地的请求代理到服务器上(如果接口没有校验登陆的情况) 最简单的方法:在项目文件中找到webpack开发环境的配置文件,配置devServer对象 devServer: { conten ...

  8. nginx 做前端代理时proxy参数配置

    1.后台可登录: proxy_connect_timeout 300s; proxy_send_timeout ; proxy_read_timeout ; proxy_buffer_size 256 ...

  9. Apache代理Tomcat实现session共享构建网上商城系统

    一.环境介绍 二.安装配置后端服务器 三.安装配置前端服务器 四.配置Tomcat服务器实现session共享 五.构建网上商城系统 一.环境介绍 系统版本:CentOS 6.4_x86_64 Mys ...

随机推荐

  1. DNS安全浅议、域名A记录(ANAME),MX记录,CNAME记录

    相关学习资料 http://baike.baidu.com/link?url=77B3BYIuVsB3MpK1nOQXI-JbS-AP5MvREzSnnedU7F9_G8l_Kvbkt_O2gKqFw ...

  2. JSP将表单提交并在本页中显示

    代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8& ...

  3. window自动切换ip的脚本

    因为总要切换ip,所以百度了一下脚本 如下http://jingyan.baidu.com/article/d2b1d1029d21b95c7e37d4fa.html 动态ip netsh inter ...

  4. POJ2586Y2K Accounting Bug(贪心 + 不好想)

    Y2K Accounting Bug Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12251   Accepted: 62 ...

  5. 类型安全且自动管理内存的返回 std::string 的 sprintf 实现

    在这篇博文里,我提到了一个例子,说的是使用C++实现类型安全的printf.这个例子很惊艳,但是在我写程序的时候,并非那么"迫切"地需要它出现在我的工具箱中,因为它并不比普通的pr ...

  6. Help Me with the Game(imitate)

    Help Me with the Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3630   Accepted:  ...

  7. FOJ 1205

    Problem 1205 小鼠迷宫问题 Accept: 522    Submit: 1679 Time Limit: 1000 mSec    Memory Limit : 32768 KB Pro ...

  8. ubuntu 12.04 server编译安装nginx

    tar -xvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./config make make install above is for zlib(refers http:// ...

  9. win7安装ubuntu后,进入不了win7

    方法一:进去ubuntu系统后,终端下输入如下命令:sudo update-grub,输入命令后,会提示寻找win7,ubuntu系统.并自动建立引导详情链接:http://zhidao.baidu. ...

  10. PHP - 获取和设置include_path .

    PHP - 获取和设置include_path 分类:             PHP              2011-02-16 13:19     2818人阅读     评论(1)     ...