资讯专栏INFORMATION COLUMN

超简单工具puer——“低碳”的前后端分离开发

Airy / 3120人阅读

摘要:本文有点大哈,相较于目前国内正流行起来的前端后移的前后端分离方案,本文介绍是一种低碳的版本,所以不要纠结于这个的正确性哈。碰到问题先看看有没有你的答案资源汇总推荐低碳的前端服务器工具推荐常用远程调试工具推荐工具,快速跳转到最常用的目录。

本文由作者郑海波授权网易云社区发布。

前几天,跟一同事(MIHTool作者)讨教了一下开发调试工具。其实个人觉得相较于定制一个类似MIHTool的Hybrid App容器,基于长连的B/S架构的工具其实会是一个更轻量的解决方案。此文会分享一下超简单工具puer,以及如何利用它在产品开发的各阶段实现高效的开发。

本文title有点大哈,相较于目前国内正流行起来的前端后移的前后端分离方案,本文介绍是一种“低碳”的版本,所以不要纠结于这个Title的正确性哈。

简介
简而言之,Puer是一个可以实时编辑刷新的前端服务器。特性一览:

提供一个当前或指定路径的静态服务器

所有浏览器的实时刷新:编辑css实时更新(update)页面样式,其它文件则重载(reload)页面

提供简单熟悉的mock请求的配置功能,并且配置也是自动更新。

可用作代理服务器,调试开发既有服务器的页面,可与mock功能配合使用

集成了weinre,并提供二维码地址,方便移动端的调试

可以作为connect中间件使用(前提是后端为nodejs,否则请使用代理模式)

可以发现这里功能并不多,但罗列的基本都是实际前端开发中会涉及到的。可能敏锐的朋友会点出,同类的browser-sync提供了更强的操作同步的功能。这点其实主要不想去盲目攀比功能(实现其实并不难,因为基础的注入脚本已经做了,剩下的都只是功能堆砌),目前的出发点都是作者实际的需求(好吧,其实是懒)。还有就是,其实puer诞生比它要早一年多。

让我们开始使用吧
安装
确保你安装了nodejs(现在还有没nodejs环境的前端? 拖出去喂狗吧)

使用npm全局安装puer命令

npm install puer -g
输入puer -h可以查看Help

Usage: puer [options...]Options:
-p,--port server"s listen port, 8000 default
-f,--filetype fileType to watch(split with "|"), defualt "js|css|html|xhtml"
-d,--dir your customer working dir. default current dir
-i,--inspect start weinre server and debug all puer page
-x,--exclude exclude file under watching(must be a regexp), default: ""
-a,--addon your addon"s path
-t,--target proxy url

 --no-reload       close  auto-reload feature,(not recommended)
 --no-launch       close the auto launch feature

-h,--help help list
强烈中文即时感的英语相信和大家交流起来不会很困难。

使用

90%的使用场景下

cd /path/to/workspace ↵
puer ↵
puer会默认为你打开http://localhost:8000页面(端口可以 -p 8001参数进行控制),并贴心的帮你列出了所有你本地可用的ip以及当前的地址二维码,方便手机访问。

编辑当前路径下的文件,会实时更新页面(无论你在多少台电脑打开多少个页面)。

关于如何命令行下快速到达工作目录,作者推荐两个工具

z: 必装shell工具,快速进入最常用目录

sublime-terminal: 直接进入当前文件或工程的所在路径

在开发静态页面时,这个简单的功能意义非凡,特别是双屏的时候,可以完全解放你的F5键。关键是:

保存后看到浏览器同步刷新,有种莫名的愉悦感涌上心头有木有?

作者简单将这种现象归结于之前看到的一篇文章:【人无法在两种思维模式下进行高效切换】,猜想这可能这和CPU的进程切换是一样一样的。

进阶1 mock请求
假设你的静态页面开发到一定程度,需要与服务器端交互了,而后台服务还完全无法联调,这其实是属于最简单的前后端分离开发的场景。一般而言, 作者会通过以下几种方案。

层级1: 通过代码解耦,直接在前端mock数据

这种方式影响较大,而且无论你解耦的如何,都会增加最终上真实环境的切换成本。

层级2: 通过fiddler等调试代理工具mock数据

优点是到正式环境的切换成本小,但配置成本较大,也接口mock也有局限性并基本上只能是静态数据模拟。

层级3:利用puer无痛的解决这个问题

puer提供了叫插件(addon)的功能,集成了express的route.js来达到最简的路由配置,可以提供基于真实http请求与相应的动态的mock数据。

puer -a route.js
route.js 这么写

// use addon to mock http requestmodule.exports = { // GET
"GET /v1/posts/:id": function(req, res, next){ // response json format

res.send({
  title: "title changed",
  content: "tow post hahahah"
})

}, // PUT POST DELETE is the same
"PUT /v1/posts/:id": function(){

}, "POST /v1/posts": function(){

}, "DELETE /v1/posts/:id": function(){

}
}%
它其实就是一段nodejs程序,输出是一配置对象,key的空格前代表的是请求Method,后半部分是请求路径,而value代表回调函数和express的路由中间件是一致的,传入的request和response对象,相较于原生的提供了一些额外方法,不了解的也可以戳这里

【戳这里看演示GIF】

通过演示其实你可以发现,编辑route.js后,这份配置脚本是动态更新的,免去了你一次次重启服务器的工作。

进阶2:使用代理模式,应用puer到以有服务器中
开发进行到一定阶段,一般后端服务就逐步进入了,静态页面的开发不再适用。到这个时候,我们可以使用--target path切换到代理模式将puer作为一个代理服务器使用。

比如本地已经存在一个localhost:8020的服务,你要在其上实现自动刷新的功能,请使用-t 或 --target。

puer -t http://localhost:8020
【请戳演示GIF】

需要注意的是,进阶2提到的addon是可以和这个模式配合使用,这使得我们在后台服务青黄不接的时候率先开发完前端功能,深藏功与名。

puer -t http://localhost:8020 -a route.js
【请戳target配合addon的演示】

进阶3: 使用weinre调试所有经过puer的页面
weinre是目前最常用的远程调试工具,它虽然几乎无法调试JS,但是由于和平台、浏览器无关的特性,使得这个低效的工具一直流行至今,也有很多工具集成了它,比如我之前提到的MIHTool。

不过要使用weinre,你需要在每个调试的页面插入一个记不住名字的脚本,并开启weinre服务,这都属于重复性劳动。puer通过 -i flag来开启 weinre的内置集成,每一个经过puer的页面都会被自动注入脚本。你可以在9001端口找到你的weinre服务,也可以通过puer的初始页面进入

puer -i
【请戳inspect的演示】

进 阶4: 作为中间件来应用与nodejs作为后台的产品
这个功能其实并不常用了,它将puer作为express/connect服务器的中间件来使用,先贴个代码范例。

var connect = require("connect")var path = require("path")var http = require("http")var puer = require("puer")var app = connect()var server = http.createServer(app)var options = {

dir: "path/to/watch/folder", 
ignored: /(/|^)..*|node_modules/  //ignored file}

app.use(puer.connect(app, server , options)) //use as puer connect middleware// you must use puer middleware before route and static midleware(before any middle may return "text/html")app.use("/", connect.static(__dirname))

server.listen(8001, function(){ console.log("listen on 8001 port")
})
一般你在development环境开启它,而在product环境关闭即可,需要注意的是它必须放在可能输出html的中间件之前。

一个简单的puer命令可以带你在各个开发阶段自由飞翔,还不赶紧试一下?

写在最后
名字含义 : puer意为普洱,除了爱喝和够短没有任何含义,懒得取名罢了。

写puer的原动力是作者对f5网页免刷新工具欲求不满(况且它如此简单的功能还需要开启一个桌面gui完全不能忍是么),所以功能抉择上带有一些主观性。如果你试用后,觉得它有价值并有改进余地,可以在issues下留下你的灼见(必须先来一发star)。

碰到问题先puer -h看看有没有你的答案

资源汇总
puer(推荐): “低碳”的前端服务器工具

weinre(推荐): 常用远程调试工具

z(推荐): Shell工具,快速跳转到最常用的目录。

browser-sync: 包含puer的部分功能,同时提供多页面的操作同步(跳转、表单)

MIHTool:MIHTool是前端工程师在iOS设备上调试和优化页面的得力助手(原slogan)

sublime-terminal: 快速打开sublime工程或当前文件目录

f5网页免刷新工具:基于air的免刷新gui工具,习惯windows的gui工具的童鞋可以试用下。

文章来源: 网易云社区

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25375.html

相关文章

  • 前后分离总结

    摘要:如何去解决这些问题前后端分离大部分的互联网公司都分成了前端团队和后端团队。方案一采用架构业界很多公司会采用,单页应用的架构,这种架构是天然的前后端分离的。方案二淘宝的大前端方案中途岛上图是淘宝基于的前后端分离分层,以及的职责范围。 我们遇到了什么问题? 1.前端无法调试后端未完成的 API:如果后端同学还没有完成 API 开发,那么前端同学就不能对这个 API 进行开发。之前我们都是在...

    enrecul101 评论0 收藏0
  • 基于webpack前后分离开发环境实战

    摘要:背景随着互联网应用工程规模的日益复杂化和精细化,我们在开发一个标准应用的早已开始告别单干模式,为了提升开发效率,前后端分离的需求越来越被重视,前端负责展现交互逻辑,后端负责业务数据接口,基本上也成为了我们日常项目分工中的标配,但是前后端分离 背景 随着互联网应用工程规模的日益复杂化和精细化,我们在开发一个标准web应用的早已开始告别单干模式,为了提升开发效率,前后端分离的需求越来越被重...

    soasme 评论0 收藏0
  • Vue.js + LeanCloud(node.js)前后分离开发样板

    摘要:最新的云引擎都升级到,很多都有变化,之前的全栈项目却是没人维护了。最近学习感觉真的好用,所以配合最新的云引擎写一个,作为以后快速开发的模板工具。前后端完全分离,服务端设置了跨域,前端项目提出去也是的。 如果对您有帮助的话,欢迎 star~ 我的github 地址 另外现在用命令行部署 leancloud 有点问题,async/await 会报错,但是使用 git 部署不会,所以还是使用...

    wudengzan 评论0 收藏0
  • [ 好文分享 ] 美团酒店Node全栈开发实践

    摘要:我所在的美团酒店事业部去年月份成立,新的业务新的开发团队,这一切使得我们的前后端分离推进的很彻底。日志监控平台日志监控平台是美团内部的一个日志收集系统,目前美团统一使用收集日志,具有接收格式日志的能力,而日志监控平台也是以格式日志来收集。 转自:美团技术团队 作者:美团技术团队 分享理由:很好的分享,可见,基于Node的前后端分离的架构是越显流行和重要,前端攻城狮们,No...

    wangdai 评论0 收藏0
  • JAVA前后分离开发环境搭建详细教程——JeecgBoot快速开发平台

    摘要:目录索引后端开发工具前端开发工具镜像入门配置采用前后端分离的架构,官方推荐开发工具前端开发或者后端开发安装插件或者开发工具下载提取码后端开发工具序号工具参考安装插件自定义皮肤主题常用快捷键前端开发工具序号工具描述参考安装运行环境,此处使用 目录索引: 后端开发工具 前端开发工具 Nodejs镜像 WebStorm入门配置 JeecgBoot采用前后端分离的架构,官方推荐开发工具 ...

    Java_oldboy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<