Whistle插件开发-remote-rules
最近公司提供了云IDE服务,这样部分开发工作可以从本地切换到远程机器,同时现在前端也走向了微前端,开发时总是需要走代理。云IDE出现后,意味着代理的地址会随着IDE地址而变化,因此这里驱动出了,解决一键加载远程代理规则的需求。
云IDE出现后,整体开发流程如下
- 当任务管理系统下发一个story
- 开发者创建feat/fix分支,CI自动创建一台云IDE开发环境,同时创建出新的whistle代理规则文件
- CI发送消息告知云IDE地址及whistle代理规则文件地址
- 开发者点击whistle代理地址,直接加载该规则
- 开发者开始开发
如上的好处是,开发人员不用手动维护代理规则文件。
为了解决这样的需求,开始whistle插件开发,发现whistle提供了脚手架工具及一些demo,整体开发还是比较顺利的。但有些问题,官网并没有描述很清楚,这里简单总结下,兴许帮到些同行。
开发
大致实现逻辑如下
- 利用UI Server针对whistle web服务暴露新的URL,支持携带remoteRules参数
- 插件UI router中处理参数,根据参数值下载rule规则文件,临时保存
- 调用whistle命令
w2 add
进行加载 - 重定向到whistle web rules页面下
插件安装及源码戳这里,兴许帮到些人
使用效果
1 | npm i whistle -g |
自动加载远程规则,地址模版如下
1 | http://local.whistlejs.com/whistle.remote-rules/?remoteRules={url} |
举个例子
1 | http://local.whistlejs.com/whistle.remote-rules/?remoteRules=https%3A%2F%2Fgist.githubusercontent.com%2Falanhg%2Fa950d216121002d5bb0fd1278789da75%2Fraw%2Fc8bdf23e05c9dc504ea393a0b373cb556df911d8%2Ftest-whistle.js |
有了该插件支持,CI方面就可以直接推送如上的地址,开发者点击加载后就可以继续开发调试了。
注意事项
whistle官方文档及案例有些方面描述的不够清晰,这里补充下
插件调试
1
2
3
4
5如果whistle处于运行状态下,需要手动关闭
w2 stop
运行whistle,这时是调试模式,插件脚本中的异常或者console打印信息均会在脚本启动的终端打印出来
w2 run插件开发,热更
1
2
3
4
5脚本修改,实时编译,TS开发时需要
npm run dev
监测dist及rules文件,如果有修复会自动更新加载的插件,如果更新,终端会打印reload信息
lack watch发布
插件发布,并不需要推送到whistle作者的repo或者whistle-plugins组织下,以个人名义发布即可,只需要注意,whistle约定包名称来确保被whistle识别,比如我开发的
whistle.remote-rules
whistle-server
whistle提供了多种server,确定需求从而选择对应的server,比如需要拓展UI服务,实现自定义页面来执行某个动作,比如我这里的暴露URL,实现自动下载远程规则,所以依赖uiServer,而router对应就是自己实现的一些API或者子路由页面
写在最后
Whistle暴露的口子支持基于个人需求可以拓展代理feat,这点还是很赞的。