国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

升級(jí)說明

升級(jí)說明


升級(jí)指南

  • 從 5.7 升級(jí)到 5.8.0

高影響的改變

  • 以秒為單位緩存 TTL
  • 緩存鎖的安全性改進(jìn)
  • Markdown 文件路徑改變
  • Nexmo / Slack 通知頻道改變

中等影響的改變

  • 容器生成器和標(biāo)簽服務(wù)
  • SQLite 版本約束
  • 在字符串和數(shù)組方面用類取代 Helpers
  • 棄用 Deferred 服務(wù)提供者
  • 符合 PSR-16 規(guī)范
  • 改進(jìn)不規(guī)則復(fù)數(shù)的模型名稱結(jié)尾
  • 自定義中間表模型增加自增 id 屬性
  • 支持 Pheanstalk 4.0 庫(kù)

從 Laravel 5.7 更新到 5.8

預(yù)計(jì)升級(jí)時(shí)間:1 小時(shí)

注:我們?cè)噲D記錄每一個(gè)可能發(fā)生的變化。因?yàn)榇蟛糠制茐男缘淖兓诳蚣艿膬?nèi)部,這些更改僅有一部分的更改可能影響你的應(yīng)用。

更新依賴

composer.json 中,將 laravel/framework 依賴項(xiàng)更新為 5.8.*

接下來,檢查應(yīng)用程序中已安裝的第三方包是否支持 Laravel 5.8,并檢查已安裝的版本是否正確。

應(yīng)用契約

environment 方法

影響可能性:非常低

Illuminate/Contracts/Foundation/Application  類 environment 方法的簽名已修改。如果在您的應(yīng)用程序中重寫了這個(gè)方法,您應(yīng)該更新此方法的簽名:

/**
 * 獲取或檢查當(dāng)前應(yīng)用程序的環(huán)境
 *
 * @param  string|array  $environments
 * @return string|bool
 */public function environment(...$environments);

新添加的方法

影響可能性:非常低

以下新添加方法 bootstrapPath, configPath, databasePath, environmentPath, resourcePath, storagePath, resolveProvider, bootstrapWith, configurationIsCached, detectEnvironment, environmentFile, environmentFilePath, getCachedConfigPath, getCachedRoutesPath, getLocale, getNamespace, getProviders, hasBeenBootstrapped, loadDeferredProviders, loadEnvironmentFrom, routesAreCached, setLocale, shouldSkipMiddleware, terminate 將會(huì)被添加到 Illuminate/Contracts/Foundation/Application 中.

如果你實(shí)現(xiàn)了這個(gè)接口,你應(yīng)該將這些方法添加到實(shí)現(xiàn)類中。

認(rèn)證

重置密碼通知路由參數(shù)

影響可能性:低

當(dāng)用戶點(diǎn)擊重置密碼鏈接時(shí),Laravel 使用 route 助手生成 URL ,以創(chuàng)建指向以 password.reset 命名的路由,當(dāng)使用 Laravel 5.7 的時(shí)候,token 將會(huì)被傳遞到不帶顯式名稱的 route 助手,比如:

route('password.reset', $token);

當(dāng)你使用 Laravel 5.8 時(shí),token 作為顯式參數(shù)傳遞給 route 助手:

route('password.reset', ['token' => $token]);

因此,如果你要定義自己的 password.reset 路由,則它的 uri 中一定要包含一個(gè) token 參數(shù)。

默認(rèn)密碼長(zhǎng)度改變

影響可能性:低

選擇或重置密碼時(shí)所需的密碼長(zhǎng)度 更改為至少八個(gè)字符 。

緩存

TTL 以秒為單位

影響可能性:非常高

為了在存儲(chǔ)數(shù)據(jù)時(shí)允許更精細(xì)的到期時(shí)間,緩存數(shù)據(jù)的生存時(shí)間從分改為秒。  Illuminate\Cache\Repository 類和它的擴(kuò)展類的 put ,  putMany ,  add ,  remembersetDefaultCacheTime 方法,以及所有緩存存儲(chǔ)器的 put 方法都完成了此更新。詳情請(qǐng)看 相關(guān)的 PR  。

如果要向這些方法中的任何一個(gè)傳遞整數(shù),請(qǐng)更新代碼以確保保留在緩存中的數(shù)據(jù)傳遞的數(shù)值是秒。另外,你可以傳遞一個(gè) DateTime 實(shí)例指示數(shù)據(jù)何時(shí)到期:

// Laravel 5.7 - 存儲(chǔ)數(shù)據(jù)30分鐘
Cache::put('foo', 'bar', 30);// Laravel 5.8 - 存儲(chǔ)數(shù)據(jù)30秒
Cache::put('foo', 'bar', 30);// Laravel 5.7 / 5.8 - 存儲(chǔ)數(shù)據(jù)30秒
Cache::put('foo', 'bar', now()->addSeconds(30));

{提示} 此更改使 Laravel 緩存系統(tǒng)完全符合 PSR-16 緩存庫(kù)標(biāo)準(zhǔn) 。

遵循 PSR-16

影響可能性:中等

除了以上返回值有變化之外,本次升級(jí)還更新了 Illuminate\Cache\Repository 類中的 put, putManyadd 方法的 TTL 參數(shù),使之更符合 PSR-16 規(guī)范。新特性提供了一個(gè)默認(rèn)的 null ,所以如果不指定 TTL 值,那么緩存將會(huì)永久存儲(chǔ)不會(huì)過期。此外,如果緩存項(xiàng)的 TTL 為 0 或者更小,那么將會(huì)被清除。參閱 相關(guān)的 PR 獲取更多信息。

KeyWritten 事件基于這些變動(dòng) 也進(jìn)行了更新 。

鎖安全性改善

影響可能性:高

在 Laravel 5.7 以及 Laravel 更早的版本的中,一些緩存驅(qū)動(dòng)提供的 “原子鎖” 特性,可能由于一些意外行為導(dǎo)致鎖被提前釋放。

例如: 客戶端 A 獲取了一個(gè) 10 秒過期的鎖 foo。客戶端 A 實(shí)際上需要耗費(fèi) 20 秒來完成它的任務(wù)。在客戶端 A 任務(wù)執(zhí)行期間,鎖被緩存系統(tǒng)自動(dòng)釋放。之后 客戶端 B 獲取到鎖 foo。最終 客戶端 A 完成了它的任務(wù)并釋放掉鎖 foo,但是無意中釋放了 客戶端 B 所持有的鎖。這時(shí)候 客戶端 C 又可以獲取到鎖。

為了緩解這種情況,現(xiàn)在使用嵌入的「范圍令牌」生成鎖,這樣可以確保在正常情況下,只有鎖的持有者才能釋放鎖。

如果你正在使用 Cache::lock()->get(Closure) 方法使用鎖,則不需要進(jìn)行任何更改:

Cache::lock('foo', 10)->get(function () {    // 鎖將會(huì)被安全的自動(dòng)釋放});

但是,如果要手動(dòng)調(diào)用, Cache::lock()->release() ,則必須更新代碼以維護(hù)鎖的實(shí)例。然后,在完成任務(wù)后,可以在同一個(gè)鎖實(shí)例上調(diào)用 release 方法。例如:

if (($lock = Cache::lock('foo', 10))->get()) {    // 執(zhí)行任務(wù)…    $lock->release();}

有時(shí),您可能希望在一個(gè)進(jìn)程中獲取鎖定并在另一個(gè)進(jìn)程中釋放它。例如,您可以在 Web 請(qǐng)求期間獲取鎖定,并希望在該請(qǐng)求觸發(fā)的排隊(duì)作業(yè)結(jié)束時(shí)釋放鎖定。在這種情況下,您應(yīng)該將鎖定的作用域「owner token」傳遞給排隊(duì)的作業(yè),以便作業(yè)可以使用給定的令牌重新實(shí)例化鎖:

// 在控制器中…$podcast = Podcast::find(1);
if (($lock = Cache::lock('foo', 120))->get()) {
    ProcessPodcast::dispatch($podcast, $lock->owner());}// 在進(jìn)程廣播隊(duì)列中…
Cache::restoreLock('foo', $this->owner)->release();

如果您想在不尊重其當(dāng)前所有者的情況下釋放鎖定,您可以使用以下 forceRelease 方法:

Cache::lock('foo')->forceRelease();

RepositoryStore 契約

影響可能性:非常低

為了完全符合 PSR-16 的要求,Illuminate\Contracts\Cache\Repository 契約的 putforever 方法的返回值以及 Illuminate\Contracts\Cache\Store 契約的 put, putManyforever 方法 已更改 從 voidbool 。

集合

firstWhere  方法

影響可能性:非常低

firstWhere 方法參數(shù) 已更改 匹配 where 方法的簽名。如果要重寫此方法,則應(yīng)更新方法的參數(shù)來匹配其父級(jí):

/**
 * Get the first item by the given key value pair.
 *
 * @param  string  $key
 * @param  mixed  $operator
 * @param  mixed  $value
 * @return mixed
 */public function firstWhere($key, $operator = null, $value = null);

終端

Kernel 契約

影響可能性:非常低

terminate 方法 已經(jīng)添加到 Illuminate/Contracts/Console/Kernel 契約中。如果你實(shí)現(xiàn)了這個(gè)接口,則應(yīng)該將這個(gè)方法添加到實(shí)現(xiàn)類中。

容器

生成器 & 標(biāo)記服務(wù)

影響可能性:中等

容器的 tagged 方法使用 PHP 生成器通過給定的標(biāo)記惰性地實(shí)例化服務(wù)。由于這種改變,tagged 方法返回  iterable 類型,而不是 數(shù)組。如果你這個(gè)方法使用了類型提示的返回值,則應(yīng)確保將類型提示也更改為 iterable 類型。

另外,不能再通過數(shù)組偏移值直接訪問標(biāo)記服務(wù) ,比如 $container->tagged('foo')[0]

resolve 方法

影響可能性:非常低

resolve 方法 接收一個(gè)新布爾參數(shù),該參數(shù)指示事件在對(duì)象實(shí)例化期間是否應(yīng)觸發(fā) / 執(zhí)行(解析回調(diào))。如果你重寫了這個(gè)方法,你必須更新方法簽名以匹配父方法。

addContextualBinding 方法

影響可能性:非常低

Illuminate\Contracts\Container\Container 契約增加了 addContextualBinding  方法。如果要實(shí)現(xiàn)此接口,則應(yīng)將此方法加到你的實(shí)現(xiàn)中。

tagged 方法

影響可能性:低
tagged 方法現(xiàn)在 改為 返回 iterable 類型而不是 array 類型。如果你的代碼參數(shù)有類型提示,找到所有 tagged 方法提示  array 類型的地方,將類型提示改為 iterable 類型。

flush 方法

影響可能性:非常低

Illuminate\Contracts\Container\Container 契約增加了 flush 方法。如果要實(shí)現(xiàn)此接口,則應(yīng)將此方法加到你的實(shí)現(xiàn)中。

數(shù)據(jù)庫(kù)

未被引號(hào)包圍的 MySQL JSON 值

影響可能性:低

在使用 MySQL 和 MariaDB 的時(shí)候,Query 構(gòu)造器返回的 JSON 值將不會(huì)使用引號(hào)包圍。其他數(shù)據(jù)庫(kù)將和這里的行為保持一致:

$value = DB::table('users')->value('options->language');
dump($value);
// Laravel 5.7...
'"en"'
// Laravel 5.8...
'en'

因此,不再支持或不再需要 ->> 操作符了。

SQLite

影響可能性:中等

從 Laravel 5.8 開始, 最早版本 SQLite 支持 一直到 SQLite 3.7.11。如果你使用的是更早之前的 SQLite 版本,你應(yīng)該升級(jí) (推薦升級(jí)到 SQLite 3.8.8+)。

Eloquent

模型命名中的不規(guī)則復(fù)數(shù)結(jié)尾

影響可能性:中等

從 Laravel 5.8 起,含有不規(guī)則復(fù)數(shù)形式結(jié)尾的復(fù)合名稱模型命名 現(xiàn)在可以正確的進(jìn)行復(fù)數(shù)化.

// Laravel 5.7...
App\Feedback.php -> feedback (正確的復(fù)數(shù)形式)
App\UserFeedback.php -> user_feedbacks (錯(cuò)誤的復(fù)數(shù)形式)
// Laravel 5.8
App\Feedback.php -> feedback (正確的復(fù)數(shù)形式)
App\UserFeedback.php -> user_feedback (正確的復(fù)數(shù)形式)

如果你的模型名稱沒有正確的使用復(fù)數(shù)名稱,你在模型中定義 $table 屬性之后還是可以繼續(xù)使用它的:

/**
 * 與模型關(guān)聯(lián)的數(shù)據(jù)表名稱。
 *
 * @var string
 */protected $table = 'user_feedbacks';

帶有遞增 ID 的自定義中繼模型

如果你用一個(gè)自定義的中繼模型定義了多對(duì)多的關(guān)系,而且這個(gè)中繼模型擁有一個(gè)自增的主鍵,你應(yīng)當(dāng)確保這個(gè)自定義中繼模型類中定義了一個(gè) incrementing 屬性其值為 true

/**
 * 標(biāo)識(shí) ID 是否自增
 *
 * @var bool
 */public $incrementing = true;

loadCount 方法

影響可能性:低

基礎(chǔ)類 Illuminate\Database\Eloquent\Model 中添加了 loadCount 方法。如果你的應(yīng)用中也定義了 loadCount 方法,可能會(huì)和 Eloquent 中的相沖突。

originalIsEquivalent 方法

影響可能性:非常低

Illuminate\Database\Eloquent\Concerns\HasAttributes trait 中的 originalIsEquivalent 成員方法從 protected  改變?yōu)?public

deleted_at 屬性的自動(dòng)軟刪除轉(zhuǎn)換

影響可能性:低

當(dāng)你的 Eloquent 模型使用了 Illuminate\Database\Eloquent\SoftDeletes trait 時(shí) deleted_at 成員屬性 現(xiàn)將會(huì)自動(dòng)轉(zhuǎn)換 成為一個(gè) Carbon 實(shí)例。你可以重寫這個(gè)行為,通過為該成員屬性編寫你的自定義 accessor 或者手動(dòng)將它添加到 casts 屬性中:

protected $casts = ['deleted_at' => 'string'];

BelongsTogetForeignKey 方法

影響可能性:低

BelongsTo 關(guān)聯(lián)關(guān)系中的 getForeignKeygetQualifiedForeignKey 方法已分別重命名為 getForeignKeyNamegetQualifiedForeignKeyName,使得方法名和在 Laravel 提供的其他關(guān)聯(lián)關(guān)系中保持一致。

事件

fire 方法

影響可能性:低

Illuminate/Events/Dispatcher 類中的 fire 方法 (在 Larevel 5.4 中不贊成使用)  已經(jīng)被 移除 了。
你應(yīng)當(dāng)使用它的替代方法 dispatch 。

異常處理器

ExceptionHandler 契約

影響可能性:低

Illuminate\Contracts\Debug\ExceptionHandler 契約中新增了 shouldReport 方法。 現(xiàn)在當(dāng)你實(shí)現(xiàn)異常處理器的接口時(shí),你需要同時(shí)實(shí)現(xiàn)此方法。

renderHttpException 方法

影響可能性:低

Illuminate\Foundation\Exceptions\Handler 類中 renderHttpException 方法的簽名 有改動(dòng) ?,F(xiàn)在如果你在異常處理器中重寫此方法,應(yīng)當(dāng)修改方法的簽名以和其父類保持一致:

/**
 * 將給定的 Http 異常轉(zhuǎn)換為 Http 響應(yīng)。
 *
 * @參數(shù) \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface  $e
 * @返回 \Symfony\Component\HttpFoundation\Response
 */protected function renderHttpException(HttpExceptionInterface $e);

Facades

Facade 服務(wù)解析

影響可能性:低

getFacadeAccessor 方法現(xiàn)在可以 只返回代表服務(wù)容器標(biāo)識(shí)的字符串 ,之前該方法會(huì)返回一個(gè)對(duì)象實(shí)例。

郵件

Markdown 文件路徑更改

影響可能性:高

如果你已經(jīng)使用 vendor:publish 命令發(fā)布了 Laravel 的 Markdown 郵件組件,你需要將 /resources/views/vendor/mail/markdown 路徑重命名為 text 。

并且 markdownComponentPaths 方法 已被重命名 為 textComponentPaths 。如果你要重寫這個(gè)方法,你應(yīng)該更新方法名,使之與其父類一致。

PendingMail 類中的方法形參改變

影響可能性:非常低

Illuminate\Mail\PendingMail 類中的 send, sendNowqueuelaterfill 方法 已被更改 為需接收一個(gè) Illuminate\Contracts\Mail\Mailable 實(shí)例作為參數(shù),而不是 Illuminate\Mail\Mailable 實(shí)例。如果你要重寫其中的方法,你需要更新其形參,和其父類保持一致。

隊(duì)列

Pheanstalk 4.0

影響可能性:中

Laravel 5.8 提供了支持 ~4.0 發(fā)布版本的 Pheanstalk 隊(duì)列。如果你正在應(yīng)用中使用 Pheanstalk 庫(kù),請(qǐng)通過 Composer 升級(jí)你的庫(kù)到 ~4.0 發(fā)布版本。

Job 契約

影響可能性:非常低

isReleased, hasFailedmarkAsFailed 方法 已被加入到 Illuminate\Contracts\Queue\Job 契約中 。如果你正在實(shí)現(xiàn)這個(gè) interface ,你應(yīng)該添加這些方法到你的實(shí)現(xiàn)代碼中。

Job::failed & FailingJob

影響可能性:非常低

在 Laravel 5.7 中,當(dāng)一個(gè)隊(duì)列任務(wù)失敗后,隊(duì)列 worker 將執(zhí)行 FailingJob::handle 方法。在 Laravel 5.8 中,FailingJob 類中的邏輯已被遷移到了 fail 方法中,該方法就定義在這個(gè)任務(wù)類中。正因如此, fail 方法被納入了 Illuminate\Contracts\Queue\Job 契約。

Illuminate\Queue\Jobs\Job 基類包含了 fail 的實(shí)現(xiàn),在常規(guī)的應(yīng)用里不需要改任何代碼。然而,如果你正在搭建自定義的隊(duì)列驅(qū)動(dòng),起了一個(gè)任務(wù)類,該任務(wù)類 沒有 繼承由 Laravel 提供的任務(wù)基類,你應(yīng)該在你自定義的任務(wù)類中手動(dòng)實(shí)現(xiàn) fail 方法。作為實(shí)現(xiàn)的參考,你可以查閱 Laravel 的任務(wù)基類。

這個(gè)改變?cè)试S定制隊(duì)列驅(qū)動(dòng),從而在對(duì)任務(wù)刪除過程獲得更多的控制。

Redis Blocking Pop

影響可能性:非常低

現(xiàn)在使用 Redis 隊(duì)列驅(qū)動(dòng)的 「blocking pop」特性是安全的。在之前,如果 Redis 服務(wù)或者 worker 掉線的同時(shí)取出任務(wù),可能造成隊(duì)列中的任務(wù)丟失(小概率事件)。 為了讓 blocking pops 變得安全,將給每一個(gè) Laravel 隊(duì)列創(chuàng)建一個(gè)新的帶有 :notify 后綴的 Redis list 。

請(qǐng)求

TransformsRequest 中間件

影響可能性:低

現(xiàn)在,當(dāng)請(qǐng)求輸入是一個(gè)數(shù)組時(shí),  Illuminate\Foundation\Http\Middleware\TransformsRequest 中間件的 transform 方法將接收到「全限定」 請(qǐng)求輸入的 key :

'employee' => [    'name' => 'Taylor Otwell',],/**
    * 轉(zhuǎn)換給定的值.
    *
    * @param  string  $key
    * @param  mixed  $value
    * @return mixed
    */protected function transform($key, $value){    dump($key); // 'employee.name' (Laravel 5.8)    dump($key); // 'name' (Laravel 5.7)}

路由

UrlGenerator 協(xié)議

影響可能性:非常低

previous 方法 已經(jīng)添加到 Illuminate\Contracts\Routing\UrlGenerator contract 中。如果要調(diào)用這個(gè)接口,你應(yīng)該將這個(gè)方法添加到你的實(shí)現(xiàn)中。

Illuminate/Routing/UrlGenerator 中的  cachedSchema 特性

影響可能性:非常低

Illuminate/Routing/UrlGenerator 中的 $cachedSchema 屬性 (在 Laravel 5.7 中已被棄用) 已更改為 $cachedScheme。

Sessions

StartSession 中間件

影響可能性:非常低

Session 的持久性邏輯已 從 terminate() 方法移動(dòng)到 handle() 方法。 如果你要重寫其中的方法, 則應(yīng)該更新它們以反映這些更改。

Support

優(yōu)先使用字符串和數(shù)組類而不是輔助函數(shù)

影響可能性:中等

所有的 array_* and str_* 全局輔助函數(shù) 都被廢棄。你需要直接使用 Illuminate\Support\ArrIlluminate\Support\Str 提供的方法。

這個(gè)調(diào)整的影響被標(biāo)記為中等,因?yàn)檫@些輔助函數(shù)被轉(zhuǎn)移到新的 laravel/helpers 擴(kuò)展包中,以便更好地向后兼容。

延遲的服務(wù)提供者

影響可能性:中等

服務(wù)提供程序的用于指示是否延遲提供程序的 defer 布爾屬性已經(jīng)被廢棄?,F(xiàn)在如果要將服務(wù)提供者標(biāo)記為延遲的需要通過實(shí)現(xiàn) Illuminate\Contracts\Support\DeferrableProvider 契約來完成。

測(cè)試

PHPUnit 8

影響可能性:可選

默認(rèn)情況下, Laravel 5.8 使用 PHPUnit 7.。不過, 你可以升級(jí)到 PHPUnit 8,但是這需要 PHP >= 7.2。更多細(xì)節(jié)請(qǐng)閱讀 PHPUnit 8 版本聲明。

setUptearDown 方法現(xiàn)在要求返回 void 類型:

protected function setUp(): voidprotected function tearDown(): void

驗(yàn)證

Validator 契約

影響可能性:非常低

Illuminate\Contracts\Validation\Validator 中 新增了 validated 方法:

/**
 * 獲取已驗(yàn)證的屬性和值。
 *
 * @return array
 */public function validated();

如果你調(diào)用了這個(gè)接口,需要添加此方法的實(shí)現(xiàn)。

ValidatesAttributes 特性

影響可能性:非常低

Illuminate\Validation\Concerns\ValidatesAttributes 特性中的 parseTable、 getQueryColumnrequireParameterCount 方法可見性從 protected 調(diào)整為了 public

DatabasePresenceVerifier

影響可能性:非常低

Illuminate\Validation\DatabasePresenceVerifier 類的 table 方法可見性從 protected 調(diào)整為了 public。

Validator

影響可能性:非常低

Illuminate\Validation\Validator 類的 getPresenceVerifierFor 方法可見性從 protected 調(diào)整為了 public

郵箱驗(yàn)證

影響可能性:非常低

郵箱驗(yàn)證規(guī)則現(xiàn)在回檢測(cè)郵箱地址是否兼容 RFC5630, 使驗(yàn)證邏輯和 SwiftMailer 保持一致。在 Laravel 5.7, email 規(guī)則只驗(yàn)證郵箱地址是否兼容 RFC822。

因此 當(dāng)使用 Laravel 5.8 時(shí),之前認(rèn)為無效的郵箱地址現(xiàn)在將被視為有效,如 (e.g hej@b?r.se)。 通常,這被看做一個(gè) bug 修復(fù); 不過, 我們還是將其列到這里給你一個(gè)提醒。如果您遇到有關(guān)此更改的任何問題,請(qǐng)通知我們。

視圖

getData 方法

影響可能性:非常低

Illuminate\Contracts\View\View 契約中新增了 getData 方法。如果你調(diào)用了這個(gè)接口, 則需要添加該方法的實(shí)現(xiàn)。

通知

Nexmo / Slack 通知頻道

影響可能性:高

Nexmo 和 Slack 通知頻道已經(jīng)被提前到官方擴(kuò)展中。要在自己的應(yīng)用中使用這些頻道,需要安裝以下擴(kuò)展包:

composer require laravel/nexmo-notification-channel
composer require laravel/slack-notification-channel

其他

我們還鼓勵(lì)你查看 laravel/laravel 代碼倉(cāng)庫(kù)的更新日志。盡管其中的很多更新不是必須的,但是你可以將你的應(yīng)用中的這些文件與代碼倉(cāng)庫(kù)保持同步。其中一些更新已經(jīng)在這篇升級(jí)指南中提到了,但是還有很多其他的小更新(如對(duì)配置文件或注釋的更改)就不會(huì)列出。你可以通過 GitHub 比較工具 查看哪些更新對(duì)你而言更加重要。

本文章首發(fā)在 LearnKu.com 網(wǎng)站上。