都是风景,幸会。

背景

当我们在做后台管理系统时,经常会遇到非常复杂的表单:

  • 表单项非常多
  • 在各种表单类型下,显示不同的表单项
  • 在某些条件下,某些表单项会关闭验证
  • 每个表单项还会有其他自定义逻辑,比如输入框可以插入模板变量、输入字符数量显示、图片上传并显示、富文本。。。
  • 在这种错综复杂的情况下,完成表单的验证和提交
  • 可以查看具体例子:例子中省略了很多琐碎的功能,只保留整体的复杂表单框架,用于展示解决方案
••••••

这几天想要把一个 git 仓库中已经存在的一个子文件夹独立成一个新的 git 仓库,并且保留之前关于此文件夹的所有提交历史。不过我对 git 并没有这么精通,只好上网搜索之。可能是因为我关键词抓得不准,搜了好一会儿才找到可行的方案,所以写篇博文记录一下,希望能帮到后来人。

另外,在 git 里这种掌控历史的感觉真棒(笑)

0x01 需求分析

我为什么会有如本文标题所述这样的需求呢?这是因为我之前把所有为 Blessing Skin 这个程序编写的插件源码都放在一个 git repo 中了,每个子文件夹中都是一个独立的插件(因为嫌麻烦所以一股脑给塞进一个仓库里了),并且对每个子文件夹中的代码的修改最后都是在这个统一仓库中提交的。该仓库差不多长这样:

••••••

功能需求

  1. 点击/滑屏切换;
  2. Tab 选项卡置底;
  3. 底部按钮悬浮,点击切换至第三个选项卡;
  4. Tab 切换内容区可滚动;
••••••

功能需求

  1. 可以拍照、单张/批量选择图片:因为应用场景是在微信小程序里边,所以单次选择图片最多9张,可以多次选择图片,图片总数量不收限制;
  2. 对选择的图片(批量)压缩:使用 Canvas 对图片进行重绘制再压缩;
  3. 显示压缩后的预览图:在页面上显示压缩后的图片;
  4. 删除图片;
  5. 最后批量上传:全部图片选择完成后,统一上传操作;
  6. 上传图片远程地址:图片上传完成之后会返回图片在服务端的远程地址,将图片远程地址上传至服务端;
••••••

Gvm 是 Go 语言多版本安装及管理的一个工具,类似于 Ruby 中的 RVM,Java 中的 Jenv(国产),Python 中的 virtualenv,Nodejs 中的 Nvm;可用于方便管理 Go 的版本,它有如下几个主要特性:

  1. 管理 Go 的多个版本,包括安装、卸载和指定使用 Go 的某个版本
  2. 查看官方所有可用的 Go 版本,同时可以查看本地已安装和默认使用的 Go 版本
  3. 管理多个 GOPATH,并可编辑 Go 的环境变量
  4. 可将当前目录关联到 GOPATH
  5. 可以查看 GOROOT 下的文件差异

尤其是前三个特性,非常实用,接下来就详细的介绍一下这款工具的安装和常用方式;

••••••

最近在做微信开发,涉及到内网穿透的问题,找了一下网上 ngrok 算是最佳的在内网调试微信服务的 tunnel 工具了,但是 ngrok 免费的账号不支持自定义域名,所以萌生了自己搭建 ngrok 服务器的想法;网上也有现成的,但是世界上没有免费的午餐,要不就是收费,要不就是免费但是偶尔会出现连接失败的问题(当然大多数时间是没有问题的)。

1、必要条件

  1. 服务器,用来搭建 ngrok 的服务器,必须有公网 ip,并且可以正常访问(本次测试使用的是 Ubuntu_14.04_64bit 系统);
  2. 域名,用来生成访问域名;
••••••

服务器环境是 Aliyun Ubuntu_14.04_64bit,系统默认的镜像地址是阿里云的镜像地址,从阿里云镜像安装的 Git 是 1.9.0 版本,并不是 Git 官网最新版本;

Git 官网针对 Ubuntu 系统有说明:For Ubuntu, this PPA provides the latest stable upstream Git version,所以我们选择从 PPA 源安装 Git 最新稳定版本:

••••••

  1. 编辑 ~/.bash_profile,加入常用命令别名,例如我加入了以下命令的别名:
alias pull='git pull origin'
alias push='git push origin'
alias add='git add .'
alias commit='git commit -m'
alias checkout='git checkout'
alias status='git status'

这里需要注意 = 两边不能有空格,不然会报 not found 错误;

  1. 保存之后重新打开 terminal 或者执行一下命名:
source ~/.bash_profile

然后就可以愉快的玩耍了^ ^