ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1
什么是 ThinkSNS+
09 年,由北京的团队开发了 ThinkSNS 涉足社交开源行业。这么多年累计不少客户。2014-2016,两年都在维护和开发之前基于 TP 的 ThinkSNS , 慢慢的引入新开发概念。终于,在2016年下半年,我们决定重写这个程序,抛弃之前的每一行代码。框架上,开发人员一致性的选择了 Laravel ,并取了一个看起来像手机厂商给手机命名的名字----ThinkSNS Plus 没错就是 Plus 也就是符号 + 因为我们更希望侧重移动端,这就是 ThinkSNS+。
如何保持和 Laravel 的升级
起初没想过框架升级的问题,后来思考了一个问题,最后会不会像之前版本一样?框架难以升级?所以我们决定每周一对 laravel/laravel 的 master 分支进行合并,为了表示对 Taylor Otwell 以及 Laravel 贡献者的尊重,每一个 commit 在合并的时候都进行了保留。
开源协议
由于 Laravel 本身是 MIT 协议,基于 Laravel 开发,我们也希望 ThinkSNS+ 能为开源社区贡献,所以代码上没有采用私有协议,而是选择了 Apache-2.0 协议进行开源。
前端工作流
这块是一个难以选择的问题,我们希望能由内置 Laravel-Mix 的契合度,又希望构建能更适合我们的应用场景,最后,我们选择 放弃 Laravel-Mix 自己做前端构建,衍生出一个新的问题,我们又希望能和 mix 辅助函数无缝配合,看了源代码后,发现问题太简单了,就是一个 mix-manifest.json
的事情而已,但是这个东西却一波三折。
起初,我们选择在 webpack.config.babel.js
中做生成函数,配合第三方包实现,功能实现了。但是如果是拓展包接入也要使用怎么办?最后开发 webpack-laravel-mix-manifest 这个前端包,来生成这个文件。
拓展设计
首选,拓展设计目前有两个,分别是 plus-component
和 plus-plugin
其实都是由 Composer 中间插件实现。
composer 插件 zhiyicx/plus-install-plugin
plus-component
这个设计其实只是想拓展包可以快速的接入路由模板数据模型这些基础开发,也是中间插件 1.0 版本中唯一实现的拓展方式,存在了长达半年之久,可以快速的写路由、控制器、数据模型,目前我们团队出的应用拓展都是以此方式开发实现。
并封装了 php artisan component
命令安装。
plus-plugin
这是一个很年轻的 type 在 composer 插件 1.1 版本中增加的,这个拓展方式实现原理很简单,其实就是 Laravel 的 Service Provider ,熟悉 Laravel 开发都知道,这个服务门面被称之为 "Laravel 拓展" 但是安装并不方便,需要先 composer require vendor/name
,然后在 app.php
的 providers 字段中配置,然后运行命令生成配置文件等。
考虑到 ThinkSNS+ 面向的都是站长、创业者、企业集团等用户,让他们改代码?简直不如杀了他们。所以,萌生了一个想法,如何把这个步骤自动化?让用户只需要 composer require vendor/name
就完成呢?而且,对于例如广播系统的使用,很需要一个这样的东西来方便开发拓展。所以想办法把这个步骤,在 composer require 步骤完成,由此开发了这个模式。
Laravel 的拓展不能直接以这种方式使用哟,因为我们做这个的想法是把配置移交到后台配置。
接口和 SPA
接口,在初期没有完全考虑 REST ful 所以,你能会看到 URL 命名很像 REST ful 规范,实际数据却不是,后续逐步规范化。
这里提到了 API 接口,意味着一个事情,我们抛弃了传统网页,ThinkSNS+ 核心就是一个 用户中心,然后功能全部由拓展实现,目前后台、手机端 都是采用 SPA 调用接口的形式开发。
ThinkSNS开源版源码官方正版获取唯一渠道:关注公众号“thinksns”,回复“开源版”即可获得最新源码压缩文件地址。
开源代码仓库:
GitHub:https://github.com/zhiyicx/thinksns-plus(点击star,每日关注开发动态。)
内测申请方式
提供个人/企业联系方式及认证信息(实名ID/企业营业执照照片或扫描件)及申请说明,发送邮件至lihecong@zhishisoft.com将有机会获得首批内测资格,名额有限,申请从速。
参与内测请提供以下资料
1个可接收验证码的手机号
1个指定邮箱
1位测试人员姓名
1个您喜欢的账号昵称
开源不易,为了争取开源,我们团队做了很多努力。把基于 Laravel 的作品展示在大家面前,之后专栏会持续不断的分享 ThinkSNS+ 开发过程中的技术细节。
ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1的更多相关文章
- 【社交系统ThinkSNS+研发日记三】基于 Laravel Route 的 ThinkSNS+ Component
[社交系统ThinkSNS+研发日记系列] 一.<ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1> 二.<基于 Laravel 开发 Th ...
- 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记【ThinkSNS+研发日记系列】
在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 社群系统ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. L ...
- 基于 Laravel Route 的 ThinkSNS+ Component
这里是传送门: <ThinkSNS+ 基于 Laravel master 分支,从 1 到 0,再到 0.1[ThinkSNS+研发日记系列一]> <基于 Laravel 开发 Th ...
- 基于 Laravel 开发 ThinkSNS+ 中前端的抉择(webpack/Vue)踩坑日记
在上一篇文章< ThinkSNS+基于Laravel master分支,从1到 0,再到0.1>,简单的介绍了 ThinkSNS+ ,这里分享在开发过程中,前端选择的心理活动. Larav ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- 如何删掉git版本库master分支的第一个commit
这个操作会将库清空,一般来说在建库开始的时候操作. 适用场景: git init初始化版本库之后,提交第一个点之后发现这个点出问题了,但是此时内心如果有洁癖的话, 你会觉得不完美,很想把这个点干掉重来 ...
- Jenkins 配置自动合并 release 分支到 master 分支
本文告诉大家如何在 Jenkins 配置合并到 release 的内容自动合并到 gitlab 的 master 分支 首先需要两个仓库,一个是 gitlab 的仓库,另一个是 Jenkins 的仓库 ...
- 准备上线,切换到master分支,报错
切换到master分支,准备上线,把上次上线sourceTree保存的修改拉出来: 运行,报错了: stackOverflow一搜说要删除旧的: 我show in finder 把他删了,然后双击安装 ...
- merge 本地 master 分支代码提示 “Already up-to-date”
在使用 git 的过程中由于误操作,导致从本地 master 分支 merge 代码到当前分支失败,虽然当前分支和 master 分支代码不同步,但是仍然提示 Already up-to-date. ...
随机推荐
- tomcat 修改为自己项目界面
修改Tomcat欢迎界面为自己项目界面 Posted on 2011-04-16 13:10 IceWee 阅读(1062) 评论(0) 编辑 收藏 所属分类: Tomcat 由于项目要发布到互 ...
- java equals和==区别及string类的说明
一.equals和==的区别 1.1.equals之string字符串的比较 1.1.1.源码如下图 if (this == anObject) { return true; ...
- LRU算法总结
LRU算法总结 无论是哪一层次的缓存都面临一个同样的问题:当容量有限的缓存的空闲空间全部用完后,又有新的内容需要添加进缓存时,如何挑选并舍弃原有的部分内容,从而腾出空间放入这些新的内容.解决这个问题的 ...
- Perl初试
通过接口发送短信的socket小样: #!/usr/bin/perl -w # auth:lichmama@cnblogs.com # what:send message to phone # usa ...
- VB6获取IE8的地址栏的URL信息
这是个老梗了,也没什么技术含量.因为自从接触Linux之后,Windows上我所知道的那一点api基本上都忘光了.所以这样的博文可以当做是备忘,说不定有天还能用的到. Windows上想要获取浏览器的 ...
- YARN框架详解
YARN框架详解 YARN官方解释 YARN是什么 The fundamental(定义) idea of YARN is to split(分开) up the functionalities(功能 ...
- jQuery教程详解(一)
PS--了解JQuery Query是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨 ...
- CSS3-loading动画(三)
分享继续,图片看得不真切 在线演示demo:http://liyunpei.xyz/loading.html 十一.效果十一 四个小球分别包含于四个正方形div,将小球相对于正方形定位(top:0:l ...
- Spring Security @PreAuthorize 拦截无效
1. 在使用spring security的时候使用注解,@PreAuthorize("hasAnyRole('ROLE_Admin')") 放在对方法的访问权限进行控制失效,其中 ...
- zabbix实现邮件报警
说明: Zabbix监控服务端.客户端都已经部署完成,被监控主机已经添加,Zabiix监控运行正常. 实现目的: 在Zabbix服务端设置邮件报警,当被监控主机宕机或者达到触发器预设值时,会自动发送报 ...