ThinkSNS+ 基於 Laravel master 分支,從 1 到 0,再到 0.1

medz發表於2017-05-01

大家好,下了很大的決心,才決定在 Laravel China 寫 ThinkSNS+ 專欄。

什麼是 ThinkSNS+

好吧,這不是廣告。。。在 09 年,由北京的團隊開發了 ThinkSNS 涉足社交開源行業。這麼多年累計不少客戶(可惜,開源使用者極少,都是商業使用者)。

2014年,由北京團隊移交開發權,在成都重組開發團隊。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-componentplus-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.phpproviders 欄位中配置,然後執行命令生成配置檔案等。

考慮到 ThinkSNS+ 面向的都是站長、創業者等使用者,讓他們改程式碼?簡直不如殺了他們。所以,萌生了一個想法,如何把這個步驟自動化?讓使用者只需要 composer require vendor/name 就完成呢?而且,對於例如廣播系統的使用,很需要一個這樣的東西來方便開發擴充。所以想辦法把這個步驟,在 composer require 步驟完成,由此開發了這個模式。

Laravel 的擴充不能直接以這種方式使用喲,因為我們做這個的想法是把配置移交到後臺配置。

介面和 SPA

介面,在初期沒有完全考慮 REST ful 所以,你能會看到 URL 命名很像 REST ful 規範,實際資料卻不是,後續逐步規範化。

這裡提到了 API 介面,意味著一個事情,我們拋棄了傳統網頁,ThinkSNS+ 核心就是一個 使用者中心,然後功能全部由擴充實現,目前後臺、手機端 都是採用 SPA 呼叫介面的形式開發。


GitHub: https://github.com/zhiyicx/thinksns-plus

開源不易,為了爭取開源,我們團隊做了很多努力。把基於 Laravel 的作品展示在大家面前,之後專欄會持續不斷的分享 ThinkSNS+ 開發過程中的技術細節。

開源是一個很容易的事情,站在公司層面,是一個很難的事情,希望大家可以為我們點個 Satr ?。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Seven 的程式碼太渣,歡迎關注我的新擴充包 medz/cors 解決 PHP 專案程式設定跨域需求。

相關文章