溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時(shí)間:2020-06-14 21:01:45 來源:網(wǎng)絡(luò) 閱讀:363 作者:ThinkSNS官方 欄目:軟件技術(shù)

什么是 ThinkSNS+
09 年,由北京的團(tuán)隊(duì)開發(fā)了 ThinkSNS 涉足社交開源行業(yè)。這么多年累計(jì)不少客戶。2014-2016,兩年都在維護(hù)和開發(fā)之前基于 TP 的 ThinkSNS , 慢慢的引入新開發(fā)概念。終于,在2016年下半年,我們決定重寫這個(gè)程序,拋棄之前的每一行代碼??蚣苌?,開發(fā)人員一致性的選擇了 Laravel ,并取了一個(gè)看起來像手機(jī)廠商給手機(jī)命名的名字----ThinkSNS Plus 沒錯(cuò)就是 Plus 也就是符號 + 因?yàn)槲覀兏M麄?cè)重移動端,這就是 ThinkSNS+。

如何保持和 Laravel 的升級
起初沒想過框架升級的問題,后來思考了一個(gè)問題,最后會不會像之前版本一樣?框架難以升級?所以我們決定每周一對 laravel/laravel 的 master 分支進(jìn)行合并,為了表示對 Taylor Otwell 以及 Laravel 貢獻(xiàn)者的尊重,每一個(gè) commit 在合并的時(shí)候都進(jìn)行了保留。

開源協(xié)議
由于 Laravel 本身是 MIT 協(xié)議,基于 Laravel 開發(fā),我們也希望 ThinkSNS+ 能為開源社區(qū)貢獻(xiàn),所以代碼上沒有采用私有協(xié)議,而是選擇了 Apache-2.0 協(xié)議進(jìn)行開源。

前端工作流
這塊是一個(gè)難以選擇的問題,我們希望能由內(nèi)置 Laravel-Mix 的契合度,又希望構(gòu)建能更適合我們的應(yīng)用場景,最后,我們選擇 放棄 Laravel-Mix 自己做前端構(gòu)建,衍生出一個(gè)新的問題,我們又希望能和 mix 輔助函數(shù)無縫配合,看了源代碼后,發(fā)現(xiàn)問題太簡單了,就是一個(gè) mix-manifest.json 的事情而已,但是這個(gè)東西卻一波三折。

起初,我們選擇在 webpack.config.babel.js 中做生成函數(shù),配合第三方包實(shí)現(xiàn),功能實(shí)現(xiàn)了。但是如果是拓展包接入也要使用怎么辦?最后開發(fā) webpack-laravel-mix-manifest 這個(gè)前端包,來生成這個(gè)文件。

拓展設(shè)計(jì)
首選,拓展設(shè)計(jì)目前有兩個(gè),分別是 plus-component 和 plus-plugin 其實(shí)都是由 Composer 中間插件實(shí)現(xiàn)。

composer 插件 zhiyicx/plus-install-plugin

plus-component
這個(gè)設(shè)計(jì)其實(shí)只是想拓展包可以快速的接入路由模板數(shù)據(jù)模型這些基礎(chǔ)開發(fā),也是中間插件 1.0 版本中唯一實(shí)現(xiàn)的拓展方式,存在了長達(dá)半年之久,可以快速的寫路由、控制器、數(shù)據(jù)模型,目前我們團(tuán)隊(duì)出的應(yīng)用拓展都是以此方式開發(fā)實(shí)現(xiàn)。
并封裝了 php artisan component 命令安裝。

plus-plugin
這是一個(gè)很年輕的 type 在 composer 插件 1.1 版本中增加的,這個(gè)拓展方式實(shí)現(xiàn)原理很簡單,其實(shí)就是 Laravel 的 Service Provider ,熟悉 Laravel 開發(fā)都知道,這個(gè)服務(wù)門面被稱之為 "Laravel 拓展" 但是安裝并不方便,需要先 composer require vendor/name ,然后在 app.php 的 providers 字段中配置,然后運(yùn)行命令生成配置文件等。

考慮到 ThinkSNS+ 面向的都是站長、創(chuàng)業(yè)者、企業(yè)集團(tuán)等用戶,讓他們改代碼?簡直不如殺了他們。所以,萌生了一個(gè)想法,如何把這個(gè)步驟自動化?讓用戶只需要 composer require vendor/name 就完成呢?而且,對于例如廣播系統(tǒng)的使用,很需要一個(gè)這樣的東西來方便開發(fā)拓展。所以想辦法把這個(gè)步驟,在 composer require 步驟完成,由此開發(fā)了這個(gè)模式。

Laravel 的拓展不能直接以這種方式使用喲,因?yàn)槲覀冏鲞@個(gè)的想法是把配置移交到后臺配置。

接口和 SPA
接口,在初期沒有完全考慮 REST ful 所以,你能會看到 URL 命名很像 REST ful 規(guī)范,實(shí)際數(shù)據(jù)卻不是,后續(xù)逐步規(guī)范化。

這里提到了 API 接口,意味著一個(gè)事情,我們拋棄了傳統(tǒng)網(wǎng)頁,ThinkSNS+ 核心就是一個(gè) 用戶中心,然后功能全部由拓展實(shí)現(xiàn),目前后臺、手機(jī)端 都是采用 SPA 調(diào)用接口的形式開發(fā)。

開源代碼倉庫:

GitHub:https://github.com/zhiyicx/thinksns-plus(點(diǎn)擊star,每日關(guān)注開發(fā)動態(tài)。)

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI