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. ...
随机推荐
- 无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]
c#解决方案EXCEL 导出 今天碰到客户的电脑在导出EXCEL的时候提示,无法将类型为 excel.applicationclass 的 com 强制转换为接口类型 excel._applicati ...
- Python库:序列化和反序列化模块pickle介绍
1 前言 在“通过简单示例来理解什么是机器学习”这篇文章里提到了pickle库的使用,本文来做进一步的阐述. 通过简单示例来理解什么是机器学习 pickle是python语言的一个标准模块,安装pyt ...
- (转载)Java自带的GUI性能监控工具Jconsole以及JisualVM简介
原文链接:http://blog.csdn.net/chendc201/article/details/22905503 1 Jconsole 1.1 简介以及连接 JConsole是一个基于JMX的 ...
- 网络爬虫——针对任意主题批量爬取PDF
|本文为博主原创,转载请说明出处 任务需求:要求通过Google针对任意关键字爬取大量PDF文档,如K-means,KNN,SVM等. 环境:Anaconda3--Windows7-64位--Pyth ...
- POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题)
POJ 3683 Priest John's Busiest Day / OpenJ_Bailian 3788 Priest John's Busiest Day(2-sat问题) Descripti ...
- 【Java IO流】File类的使用
File类的使用 Java中的File类是在java.io.File中,Java.IO.File类表示文件或目录. File类只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. 一 ...
- 西电2017ACM网络赛
#include<bits/stdc++.h> using namespace std; typedef long long LL; #define ms(a,x) memset(a,x, ...
- nyoj_83:迷宫寻宝(二)(计算几何)
题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...
- static关键字,引发的spring普通类获取spring的bean的思考
在c++和java中static关键字用于修饰静态成员变量和成员函数 举例一个普通的javabean class AA { int a; static int b; geta/seta;//此处省略g ...
- Mybaits简诉
先组织一下语言!Mybatis是一个框架,一个数据持久化的框架,作用就是SQL语句的映射!减少了JDBC繁琐的数据操作与类型转换!简而言之,就是方便.轻巧!什么是持久化,持久,恩,JDBC就是一个数据 ...