ThinkSNS是什麼?php
ThinkSNS(簡稱TS),一款全平臺綜合性社交系統,目前最新版本爲ThinkSNS+、ThinkSNS V4 ThinkSNS【簡】。laravel
看了Taylor Otwell發表的Package Auto-Discovery In Laravel 5.5第一反應是"囧"git
爲啥。。。github
也怪我,在開發以前忘記看5.5的開發代碼動態,以前的文章中也提到過,在ThinkSNS+開發場景中,咱們不可能讓用戶去 config/app.php 修改配置,因此爲了解決加載包的問題,咱們開發了Laravel服務提供者的加強版能夠看plus/doc/pakcagejson
是的,加強版的服務提供者,增長功能以下:bootstrap
l 能夠友好的加載其餘「服務提供者」(這在開發包的時候須要依賴其餘laravel拓展包頗有用)app
l 服務提供者轉到composer.json配置(無需修改配置了)composer
l 針對包更友好的publish(Laravel的vendor:publish要求輸入服務提供者類,咱們的只要求輸入包名稱)ide
l 處理器,簡化版的命令行,能夠用一個函數寫一個簡單的處理方法。函數
看到第二個就知道了,和laravel 5.5的自動發現相似,咱們是在 bootstrap/cache/providers.php 中記錄服務提供者信息,而Laravel 5.5是在vendor目錄中查找後寫入到 bootstrap/cache/package.php 。
是的,咱們的實現思路差很少,但咱們支持更多功能。從這裏讀取服務提供者列表,而後在 Illuminate\Foundation\Application::registerConfiguredProviders 函數中合併服務提供者,而後加載,從服務提供者中還能夠繼續加載服務提供者。
說下個人心情,大概是這樣:又喜又悲~
開心,高興,Laravel更易用了,另外一個心情;
惆悵,由於我在ThinkSNS+中開發了這一特性後,公司包幾乎都是以這種方式實現的。
你會說,把這些包配置字段設置下不就行了嘛?但是,在這種方式沒定型以前,已經修改過一次,難道一個多月後又要修改一次?慘不忍睹呀!!!我怕我會被揍,想一想就有點痛。
今天在羣裏說這個話題,某開發者:「哈哈,我終於開發了畫中畫功能」,而後谷歌:「Android 8 原生支持」。其實道理同樣的,並非由於官方原生支持了很差,而是在糾結,用官方的?仍是繼續維護本身的?本身的不必定有官方好,官方支持更穩定。
總結,咱們以爲廢棄掉如今的安裝器(bootstrap/cache/providers.php 是由Composer安裝器插件寫入的),而後增長一份代碼,從vendor目錄匹配出來,寫入到 bootstrap/cache/package.php 中去,只爲5.5作準備。來吧!!!
開源代碼倉庫
GitHub:https://github.com/zhiyicx/thinksns-plus(點擊star,每日關注開發動態。)