免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

插件加載失敗排查指南:從did not activate到根治

插件加載失敗排查指南:從did not activate到根治 先說實(shí)話過去一周我至少收到了三條跟plugins相關(guān)的求助消息報(bào)錯長得幾乎一模一樣——Failed to load plugins web boot: 2 entries did not activate后面還跟著一串奇怪的包名比如linxin666/dsh-p、huayu-yuan。問的人多了我突然意識到這不是個例而是所有跟插件體系打交道的開發(fā)者遲早要撞上的那堵墻。這個標(biāo)題下的熱搜詞也很有意思有人問iar plugins 是干什么的有人在搜musicfree plugins還有一堆人卡在harness failed to load plugins上。表面看是不同工具、不同生態(tài)但翻來覆去其實(shí)是同一件事——插件機(jī)制本身的工作原理和排查思路。這篇文章不打算做成plugins的詞條百科我也沒有那個能力把全世界所有插件框架講一遍。我只想以加載失敗為切口把插件的加載、激活、依賴分析、故障定位這些底層邏輯徹底講透。不管你用的是 Harness、MusicFree、IAR 還是自己寫的插件系統(tǒng)這套排查方法論都通用。看完之后你再遇到did not activate大概率不需要去搜索引擎里碰運(yùn)氣了。1. 先拆開那句最讓新手崩潰的報(bào)錯2 entries did not activate很多人第一次看到Failed to load plugins web boot: 2 entries did not activate的時候第一反應(yīng)是插件壞了第二反應(yīng)是刪了重裝。這兩個反應(yīng)都不算錯但沒有一個觸及真正的問題。我見過的項(xiàng)目里這句報(bào)錯背后藏著至少七八種完全不同的原因而且大部分跟插件本身的代碼好壞沒有直接關(guān)系。要讀懂這句話得先接受一個插件系統(tǒng)領(lǐng)域里很多人下意識忽略的事實(shí)加載插件和激活插件是兩件不同的事。一個現(xiàn)代的插件系統(tǒng)比如 Harness 的 web boot 加載器在啟動時做的事情遠(yuǎn)不止把插件的 JS 拉過來跑一遍。它內(nèi)部是分階段的發(fā)現(xiàn)階段掃描所有聲明過的插件入口entry把它們從模塊系統(tǒng)里加載進(jìn)來拿到插件的元信息。校驗(yàn)階段檢查這個插件是否滿足宿主聲明的依賴、版本、平臺要求。激活階段真正執(zhí)行插件的激活函數(shù)讓插件向宿主注冊能力、擴(kuò)展點(diǎn)或服務(wù)。報(bào)錯里說的2 entries did not activate意思是加載器已經(jīng)發(fā)現(xiàn)了兩個入口但它們在激活階段沒有成功。這里就有一個很多人容易誤解的細(xì)節(jié)did not activate并不等于插件代碼報(bào)錯了。它只是一個結(jié)果描述。插件可能因?yàn)楸旧淼拇a拋異常而沒激活可能是因?yàn)楫惒匠跏蓟瘺]等完就被宿主判定超時也可能是因?yàn)樗蕾嚨牧硪粋€插件沒起來它的激活函數(shù)選擇了靜默退出。甚至還有更離譜的情況——插件聲明了activate函數(shù)但函數(shù)簽名跟宿主期望的不匹配宿主根本就沒調(diào)用它。我的建議是遇到這句報(bào)錯先別急著懷疑插件作者也別急著懷疑自己配錯了。第一步應(yīng)該是去看日志里是否還有其他更早的報(bào)錯信息。很多框架在拋出did not activate之前會先寫一條詳細(xì)得多的錯誤日志包含具體是哪個入口、拋出的是什么異常、哪個依賴缺失。只盯著最終報(bào)錯看等于只看到了事故現(xiàn)場沒看到事故原因。從搜索引擎的熱搜詞來看linxin666/dsh-p和huayu-yuan這兩個包名反復(fù)出現(xiàn)在報(bào)錯信息里。這其實(shí)是另一個重要信號報(bào)錯里的包名越具體越說明加載器工作正常問題越集中在插件自身的元信息或依賴關(guān)系上。你順著包名去查它的package.json、它的plugin.json、它的依賴樹往往能很快找到答案。2. 為什么插件系統(tǒng)偏愛兩段式激活而不是一個init干到底弄清楚了did not activate的字面意思下一個自然的問題就是為什么要把加載和激活分開為什么不干脆像普通模塊那樣import之后就執(zhí)行、執(zhí)行完就算完成這個問題如果沒想透排查問題的思路很容易走偏。我見過不止一個開發(fā)者一看到插件加載失敗就猛改插件代碼加各種try...catch試圖讓插件跑起來。但很多時候問題根本不是插件跑不跑得起來而是宿主跟插件之間的接口協(xié)議沒對齊。插件系統(tǒng)的兩段式設(shè)計(jì)本質(zhì)上是在模仿操作系統(tǒng)加載應(yīng)用程序的過程。你想想Linux 啟動一個可執(zhí)行文件時先是由內(nèi)核把文件映射到內(nèi)存分配地址空間然后才跳轉(zhuǎn)到入口函數(shù)執(zhí)行。映射失敗是加載階段的錯誤入口函數(shù)崩了是運(yùn)行階段的錯誤。插件系統(tǒng)把這兩個階段分開能換來幾個實(shí)實(shí)在在的好處第一個好處是可控性。宿主可以對已經(jīng)加載但沒有激活的插件做預(yù)檢。插件的元信息、依賴列表、權(quán)限聲明都可以在激活之前被審查和校驗(yàn)。發(fā)現(xiàn)插件需要的宿主 API 版本不滿足直接在激活之前攔截掉不讓它執(zhí)行任何代碼。如果只有一個init函數(shù)那你只能在插件代碼執(zhí)行到一半的時候發(fā)現(xiàn)問題那時候可能已經(jīng)造成了部分副作用。第二個好處是并行和容錯。在 Harness 這類系統(tǒng)里多個插件的加載順序往往是經(jīng)過拓?fù)渑判虻摹K拗魈崆爸懒怂胁寮囊蕾囮P(guān)系圖就可以讓互不依賴的插件并行加載讓被依賴的插件先激活。如果某個插件激活失敗宿主可以決定是終止整個啟動流程還是跳過它繼續(xù)用其他插件。兩段式設(shè)計(jì)給這個決策留出了明確的判斷節(jié)點(diǎn)。第三個好處是重試和延遲激活。我舉個最常見的場景配置管理系統(tǒng)里插件 A 依賴配置服務(wù)的某個數(shù)據(jù)但配置服務(wù)本身也是另一個插件 B 提供的。宿主先加載 A 和 B然后讓 B 先激活等 B 激活完成后再去激活 A。如果 A 發(fā)現(xiàn)數(shù)據(jù)還沒準(zhǔn)備好它可以告訴宿主我沒激活但我愿意等。這種能力在init一體化設(shè)計(jì)里很難優(yōu)雅實(shí)現(xiàn)。理解了這一點(diǎn)再看did not activate你就會明白這句話既不是說插件文件下載失敗也不是說插件被禁用了而是說宿主給了你激活的機(jī)會但你沒有完成激活流程。排查的重心應(yīng)該放在激活條件是否滿足、激活函數(shù)是否拋出異常、激活結(jié)果是否被宿主正確接收這三個地方。順帶說一個我自己的實(shí)際經(jīng)驗(yàn)不少插件框架的激活函數(shù)支持返回值宿主會根據(jù)返回的 Promise 是否 resolve 來判斷激活是否成功。有的插件作者在激活函數(shù)里做了異步操作比如拉取遠(yuǎn)程配置結(jié)果忘了把這個異步操作放在返回的 Promise 鏈上導(dǎo)致激活函數(shù)已經(jīng)返回了但真正的初始化還沒完成。宿主一看函數(shù)返回了就認(rèn)為激活成功但功能實(shí)際上是殘缺的反過來如果拉取遠(yuǎn)程配置失敗異步操作在 Promise 之外拋了異常宿主捕獲不到就會一直處于未激活的懸掛狀態(tài)。這種 bug 非常隱蔽日志里未必有直接痕跡需要你仔細(xì)讀代碼才能發(fā)現(xiàn)。3. 一條完整的排查鏈路從failed to load plugins到真相大白光說理論還是太虛我用自己處理過的一個真實(shí)案例來走一遍完整排查流程。項(xiàng)目背景是一個內(nèi)部工具用了類 Harness 的插件加載器啟動時必現(xiàn)報(bào)錯Failed to load plugins web boot: 2 entries did not activate這兩個入口一個叫l(wèi)inxin666/dsh-p一個內(nèi)部封裝的儀表盤插件一個叫huayu-yuan一個數(shù)據(jù)源插件。這個場景跟熱搜詞里的情況幾乎一模一樣所以我拿它當(dāng)主案例講。3.1 第一步確認(rèn)報(bào)錯的實(shí)際觸發(fā)點(diǎn)我最初的做法很簡單直接在瀏覽器 DevTools 里打開 Network 面板看啟動時到底請求了哪些文件。結(jié)果發(fā)現(xiàn)兩個插件對應(yīng)的 JS 文件都被正常下載了HTTP 狀態(tài)碼全是 200文件內(nèi)容也能正常解析。這說明問題確實(shí)不在文件加載層面符合報(bào)錯信息里的did not activate而不是failed to load plugin file。這一步的核心價值是縮小范圍。我可以直接排除路徑配錯文件不存在CORS 攔截網(wǎng)絡(luò)超時這一類問題把注意力全部集中到激活階段。3.2 第二步復(fù)現(xiàn)并抓取更底層的錯誤光看 Network 不夠我打開了 Console把日志級別調(diào)到 verbose重新刷新頁面。這次看到了幾條之前被忽略的警告[plugin-loader] Entry huayu-yuan skipped: dependency dsh-p not active [plugin-loader] Entry linxin666/dsh-p activation failed: TypeError: Cannot read properties of undefined (reading registerPanel)這兩條日志一出來謎底基本就揭了一半。huayu-yuan之所以沒激活不是因?yàn)樽约河袉栴}而是因?yàn)樗蕾嚨膁sh-p沒激活成功。所以真正的病根在dsh-p那行TypeError上。這里就體現(xiàn)出兩段式激活和依賴注入的價值了加載器明確地把依賴未激活作為拒絕激活的原因而不是讓插件自己蒙著初始化然后詭異報(bào)錯。如果你用的是一個日志不友好的框架可能只能看到一堆undefined is not a function連是誰調(diào)誰都不知道。3.3 第三步分析插件代碼與宿主 API 的匹配關(guān)系拿到Cannot read properties of undefined (reading registerPanel)這條線索后接下來就是讀代碼。我去翻了dsh-p的源碼找到一個關(guān)鍵片段// 偽代碼示意 export function activate(host) { host.panels.registerPanel({ id: dsh, component: DashboardComponent, }); }這段代碼假設(shè)宿主傳進(jìn)來的host對象上有panels.registerPanel方法但運(yùn)行時host.panels是undefined所以直接拋了 TypeError。這意味著什么意味著插件是在面向一個較新的宿主 API 版本開發(fā)的但實(shí)際運(yùn)行它的宿主還是一個老版本老版本里面板注冊的 API 路徑是host.registerPanel沒有panels這個命名空間。這種問題特別典型的出現(xiàn)場景是插件作者升級了宿主 SDK但部署環(huán)境里宿主核心沒升級或者反過來宿主升級了老插件還在用舊 API。我后來查了項(xiàng)目的依賴鎖文件確認(rèn)dsh-p這個包是在宿主升級核心之后才發(fā)布的而宿主核心并沒有包含它預(yù)期的panels命名空間。3.4 第四步定位依賴關(guān)系中的順序問題順便解釋一下huayu-yuan的情況。它在插件目錄里聲明了對dsh-p的依賴。加載器做了拓?fù)渑判蚶碚撋蠒燃せ頳sh-p再激活huayu-yuan。但dsh-p激活時拋了異常宿主標(biāo)記它為failed然后輪到huayu-yuan時加載器檢測到它的依賴不可用直接跳過了它的激活連它的代碼都沒執(zhí)行。這種依賴未滿足就靜默跳過的設(shè)計(jì)對一個健康的插件生態(tài)其實(shí)是友好的。它避免了插件在一個殘缺的環(huán)境里運(yùn)行產(chǎn)生更難查的狀態(tài)污染。但你作為排查者必須理解這條鏈路表面上兩個插件都沒激活但真正的問題只出在第一個插件上第二個是被連帶影響的。在踩坑過程中我還發(fā)現(xiàn)一個容易誤導(dǎo)人的細(xì)節(jié)如果加載器沒有明確告訴你依賴未激活你可能會看到huayu-yuan那邊有一條Promise timeout或activation aborted之類的模糊錯誤很容易把方向引向這個插件自己卡死了。所以排查時一定要把日志里所有跟插件加載相關(guān)的條目全部拉出來看不要只看跟你懷疑對象相關(guān)的部分。3.5 第五步修復(fù)與驗(yàn)證定位到根因之后修復(fù)方案反而很簡單了。我當(dāng)時做了兩件事先把dsh-p插件升級到與當(dāng)前宿主 API 兼容的版本然后給huayu-yuan聲明依賴時加上版本范圍約束避免它再匹配到不兼容的版本。重啟應(yīng)用兩個插件都正常激活報(bào)錯消失。這個案例帶給我的方法論沉淀是插件激活失敗的問題90% 的根因不在網(wǎng)絡(luò)、不在文件缺失而在 API 兼容性、依賴順序和異步初始化三者之中。后面我會針對這三類根源分別給排查技巧。4. 真實(shí)生態(tài)觀察IAR、MusicFree、Harness 這些熱門里的插件門道熱搜詞里特別提到了三個具體的生態(tài)iar plugins嵌入式 IDE 的插件體系、musicfree plugins開源音樂播放器的音源擴(kuò)展、harness failed to load plugins web boot持續(xù)交付平臺的插件加載。把它們放在一起看特別能說明插件機(jī)制的普適性和差異性。4.1 IAR 插件嵌入式 IDE 里的能力補(bǔ)充協(xié)議iar plugins 是干什么的這個問題很多人搜是因?yàn)槌醮谓佑|嵌入式 IDE 時看到插件管理界面一頭霧水。IAR Embedded Workbench 的插件體系核心作用是擴(kuò)展編譯、調(diào)試、靜態(tài)分析之外的能力。比如你可以通過插件集成自己的代碼格式化工具、自定義構(gòu)建步驟、或者對接內(nèi)部的日志分析平臺。插件的本質(zhì)是宿主定義了一組能力協(xié)議第三方代碼通過這些協(xié)議接入。在 IAR 里這個協(xié)議通常表現(xiàn)為 IDE 提供的一組 COM 接口或自動化 API。你寫的插件只要實(shí)現(xiàn)了對應(yīng)接口就能被 IDE 識別并在菜單欄、工具欄、事件回調(diào)里出現(xiàn)入口。這里有一個通用經(jīng)驗(yàn)越是老牌的工業(yè)軟件插件協(xié)議越保守。IAR 的插件接口版本演進(jìn)速度很慢你今天按舊文檔寫的插件放在十年后的新版本 IDE 上大概率還能跑。但這種保守也意味著新特性只能靠 IDE 廠商自己加插件作者很難突破宿主能力邊界。如果你動了用插件改 IDE 內(nèi)部行為的念頭我勸你先確認(rèn)插件協(xié)議是否有暴露對應(yīng)的鉤子沒暴露就別折騰繞過去幾乎不可能穩(wěn)定。4.2 MusicFree 插件小而美的插件化思路MusicFree 是一個開源的音樂播放器它的插件機(jī)制很有代表性——插件本質(zhì)上就是一個 JS 文件導(dǎo)出一組provider接口。用戶要增加一個新音源只需要下載一個 JS 文件放進(jìn)插件目錄應(yīng)用就能在列表里多一個源選項(xiàng)。這個設(shè)計(jì)最大的優(yōu)點(diǎn)是把插件的開發(fā)門檻拉到極低不需要編譯、不需要簽名、不需要復(fù)雜的依賴聲明。但低門檻的代價就是健壯性全靠作者自律。我在 MusicFree 社區(qū)里見過不少翻車案例插件作者沒有處理異常的網(wǎng)絡(luò)請求、沒有做好超時控制導(dǎo)致應(yīng)用在解析某個音源時卡死。還有插件在provider接口里偷偷聲明了一個全局變量跟其他插件的全局變量沖突兩個插件同時啟用時行為詭異。如果你是想給 MusicFree 這類應(yīng)用寫插件我的建議是嚴(yán)格把插件當(dāng)成一個被隔離的播放適配層來寫。對外只導(dǎo)出宿主要求的接口對內(nèi)不要碰任何全局狀態(tài)所有網(wǎng)絡(luò)請求都要設(shè)置超時和錯誤兜底。插件的激活和調(diào)用是高頻操作任何一次卡頓都會直接影響用戶體驗(yàn)宿主可沒有任何節(jié)流保護(hù)。4.3 Harness企業(yè)級插件加載的復(fù)雜性和穩(wěn)定性平衡Harness 的web boot插件加載器是我個人覺得最值得研究的一種設(shè)計(jì)。它面向的是持續(xù)交付平臺這種高復(fù)雜度場景插件的來源可能是三方供應(yīng)商、內(nèi)部團(tuán)隊(duì)、甚至是同一個項(xiàng)目里的不同模塊。這樣的場景里插件之間的依賴往往非常復(fù)雜一個插件可能需要另一個插件暴露的運(yùn)行時數(shù)據(jù)而不是簡單的你先跑我再跑。企業(yè)級插件系統(tǒng)的加載失敗根因幾乎必然落在依賴版本漂移上。我在實(shí)際項(xiàng)目中見過最典型的 case插件 A 依賴某公共庫的 v2 版本插件 B 也聲明依賴同一個公共庫但鎖定了 v3宿主啟動時做了依賴加載結(jié)果先把 v2 加載了B 激活時發(fā)現(xiàn) API 對不上直接拋異常。這種問題在單體應(yīng)用里根本不可能出現(xiàn)但在插件插件化的世界里因?yàn)槟銦o法完全隔離每個插件的依賴版本沖突就成了需要持續(xù)管理的常態(tài)。解決版本漂移的方案五花八門有讓每個插件捆綁依賴做隔離的有在宿主層面做依賴協(xié)調(diào)的還有干脆規(guī)定所有公共依賴由宿主統(tǒng)一提供、插件只能使用宿主聲明的版本。這里不展開講但你應(yīng)該記住插件體系越復(fù)雜宿主對依賴的管理策略就越重要。排查問題的時候先搞清楚宿主用什么策略管理跨插件的共享依賴能幫你省掉一半的瞎猜。4.4 三個生態(tài)的橫向?qū)φ帐裁醋兞繘Q定了插件的難易度把這三個生態(tài)放在同一張表里看很多規(guī)律就清楚了維度IAR 插件MusicFree 插件Harness 插件插件載體原生代碼/DLL/COM 組件JS 文件JS bundle / npm 包激活方式IDE 啟動時掃描注冊應(yīng)用掃描目錄后調(diào)用 provider按拓?fù)漤樞驁?zhí)行 activate依賴管理宿主提供接口無顯式依賴基本無依賴顯式依賴聲明支持版本約束升級策略調(diào)接口版本文件直接覆蓋版本鎖定 發(fā)布通道常見失敗原因接口版本不匹配代碼健壯性差、全局污染依賴版本漂移、API 不兼容這張表看起來信息很多但核心就一句話插件生態(tài)的復(fù)雜度主要取決于宿主對依賴的管理強(qiáng)度。你在排查任何插件問題時都要先判斷自己處在哪種生態(tài)層級里再用對應(yīng)的方法論。5. 排查插件激活失敗的三板斧日志、代碼、隔離驗(yàn)證聊了理論、講了案例、看了生態(tài)接下來這部分是我最想讓你帶走的實(shí)戰(zhàn)方法論。不管你在什么系統(tǒng)里遇到did not activate或者failed to load plugins折騰的時候都別離開這條主線日志找直接原因、代碼找底層原因、隔離驗(yàn)證排除外部干擾。5.1 第一板斧讓日志開口說話很多時候你覺得日志沒用其實(shí)是因?yàn)槟悴恢涝摽茨念惾罩?。插件加載器通常會分幾個日志域loader記錄插件的發(fā)現(xiàn)、讀取、校驗(yàn)流程activation記錄每個入口的激活開始和結(jié)束以及失敗時的異常堆棧dependency記錄依賴關(guān)系解析和拓?fù)渑判虻倪^程以 Harness 的web boot為例如果你在啟動時看到2 entries did not activate我建議你先去激活日志域里抓取類似這樣的信息activation: activating linxin666/dsh-p activation: error in linxin666/dsh-p: TypeError: Cannot read properties of undefined activation: linxin666/dsh-p activation failed, propagation: skip activation: huayu-yuan blocked by dependency: linxin666/dsh-p大多數(shù)情況下這類日志已經(jīng)把根因?qū)懺谀樕狭?。最怕的情況是日志被設(shè)置成只輸出 error 級別把 warning 和 info 級別的關(guān)鍵線索過濾掉了。所以排查插件問題之前先把日志級別調(diào)到 debug 或 trace多出來的信息量往往能直接省掉你半小時的代碼閱讀。5.2 第二板斧順著代碼路徑讀而不是泛泛看拿到了異常堆棧之后不要滿足于哦是這里報(bào)錯了要繼續(xù)問三個問題這個變量為什么是 undefined是宿主 API 版本沒有這個方法還是插件在錯誤的時間讀取了錯誤的上下文這個函數(shù)為什么沒有被調(diào)用是宿主沒有找到它還是插件導(dǎo)出的對象結(jié)構(gòu)跟接口定義不一致這個 Promise 為什么沒有 resolve是異步邏輯掛起了還是回調(diào)根本沒有被觸發(fā)我在排查中反復(fù)驗(yàn)證過一件事插件激活失敗的 80% 的根因藏在接口簽名和 API 版本的匹配里只有 20% 才是真正的邏輯 bug。所以寧可先花時間比對插件聲明的接口版本和宿主導(dǎo)出的實(shí)際 API也別急著深挖邏輯實(shí)現(xiàn)。具體操作上我會把插件入口文件的開頭部分完整讀一遍特別關(guān)注導(dǎo)出的對象形狀。比如宿主要求導(dǎo)出{ name, version, activate, deactivate }插件卻只導(dǎo)出了{(lán) name, activate }那deactivate缺失通常不會導(dǎo)致激活失敗但如果宿主在激活前就要讀取version字段那問題就來了。5.3 第三板斧把問題壓到最小可復(fù)現(xiàn)單元如果前兩步做完還沒定位到根因那就要考慮是不是外部環(huán)境干擾太多。我的建議是做一個最小化驗(yàn)證只保留一個插件在配置里其他全部禁用看是否還能復(fù)現(xiàn)報(bào)錯。如果單插件能激活再把第二個插件加回來觀察是不是依賴順序?qū)е碌摹H绻麊尾寮布せ畈涣酥苯訉懸粋€跳過插件的宿主入口手動調(diào)用該插件的activate函數(shù)傳入一個 mock 的宿主對象在 Node 環(huán)境里跑一遍。這個流程在邏輯上等價于功能開關(guān) 二分定位的思路。而且它有一個額外的好處當(dāng)你在獨(dú)立環(huán)境里手動調(diào)用插件激活函數(shù)時所有異常都會直接暴露在控制臺里不會再被加載器吞掉或包裝成含糊的did not activate。我自己處理過一個特別頑固的 case在宿主里怎么都激活失敗報(bào)錯信息永遠(yuǎn)只有activation failed沒有堆棧。后來我把插件的activate函數(shù)拉出來在 Node 里手動執(zhí)行發(fā)現(xiàn)是插件代碼里引用了window對象但加載器在 web worker 環(huán)境里激活插件window不存在。這個問題在宿主界面完全看不出端倪只有隔離驗(yàn)證才能暴露。6. 從插件使用者視角寫一份自查清單下次遇到報(bào)錯不再慌前面幾章更像是診斷思路這一章我干脆整理成可以照著做的自查清單。遇到plugins相關(guān)的加載失敗按順序逐項(xiàng)檢查大概率能在 10 分鐘內(nèi)找到方向。6.1 環(huán)境與版本自查是否有更新過宿主核心版本插件是否有對應(yīng)的版本適配插件目錄里有多個版本混放嗎同一插件的多個副本會干擾加載器。插件的依賴聲明和實(shí)際安裝的依賴版本是否匹配用npm ls或等價命令查依賴樹。宿主運(yùn)行平臺是瀏覽器、Node 還是移動端插件是否用了平臺專有 API如window、process6.2 配置與注冊自查插件入口的路徑是否指向了正確的文件大小寫和擴(kuò)展名有沒有錯插件 ID 是否唯一有沒有跟其他插件的 ID 撞車插件的激活條件是否依賴某些配置項(xiàng)配置項(xiàng)是否存在且格式正確6.3 激活流程自查插件的activate函數(shù)是同步還是異步如果異步是否把 Promise 返回給了宿主激活函數(shù)里有沒有未捕獲的異常加一層try...catch打印日志再試一次。有沒有執(zhí)行超時的可能遠(yuǎn)程調(diào)用、文件讀取、數(shù)據(jù)庫連接都可能卡住激活流程。是否需要依賴另一個插件激活宿主是否按照依賴順序在加載6.4. 常見錯誤速查表報(bào)錯特征大概率原因優(yōu)先排查方向TypeError: Cannot read properties of undefinedAPI 版本不匹配或上下文缺失比對宿主版本與插件要求ReferenceError: xxx is not defined插件引用了不能訪問的全局變量檢查插件運(yùn)行環(huán)境隔離性activation timed out異步初始化未完成或死循環(huán)檢查激活函數(shù)里的異步鏈路blocked by dependency被依賴的插件沒有激活先解決被依賴插件的激活失敗missing required field插件導(dǎo)出對象缺少必填字段檢查導(dǎo)出對象結(jié)構(gòu)version conflict共享依賴版本沖突用依賴分析工具查看沖突鏈這張表我用引號把典型詞匯括起來是因?yàn)槟阍谌罩纠锟吹降膱?bào)錯原文千差萬別但關(guān)鍵詞是高度相似的。看見dependency、timed out、undefined這些詞就要立刻調(diào)動對應(yīng)的預(yù)案。7. 作為插件開發(fā)者怎么設(shè)計(jì)才不容易被did not activate前面從使用者角度講完了排查最后這部分我想站在更底層一點(diǎn)的位置談?wù)勗趺磳懖寮挪蝗菀撞冗M(jìn)激活失敗的坑。很多插件作者寫代碼時只看功能是否實(shí)現(xiàn)完全不考慮宿主加載器的預(yù)期結(jié)果用戶一集成就報(bào)錯然后作者覺得是宿主的問題用戶覺得是插件的問題兩邊扯皮。這類問題的本質(zhì)是插件沒有遵循宿主對插件的生命周期契約。7.1 導(dǎo)出正確的對象形狀比寫好邏輯更優(yōu)先一個合格插件入口文件至少應(yīng)該導(dǎo)出以下字段id唯一標(biāo)識name展示名稱version語義化版本號activate激活函數(shù)deactivate銷毀函數(shù)可選但強(qiáng)烈建議有些宿主還會要求requiredHostVersion、dependencies這類元信息。寫插件的第一步就是去讀宿主的插件開發(fā)文檔把導(dǎo)出對象的結(jié)構(gòu) 100% 對照清楚而不是憑經(jīng)驗(yàn)猜。我在實(shí)際項(xiàng)目中遇到過一件事有個插件作者在導(dǎo)出對象里多加了一個constructor字段導(dǎo)致宿主在序列化插件元信息時把整個對象當(dāng)成一個構(gòu)造函數(shù)來執(zhí)行激活過程直接崩潰。這類低級但致命的錯誤根因就是想當(dāng)然地給導(dǎo)出對象加料。7.2 激活函數(shù)要做到可重入、可失敗、可恢復(fù)可重入的意思是插件激活函數(shù)不應(yīng)該有只能調(diào)用一次的隱式狀態(tài)。宿主可能在熱重載、配置變更后再次調(diào)用你的activate如果你在激活時給全局變量賦值了卻沒有在設(shè)計(jì)上支持二次賦值那么第二次激活就會出現(xiàn)臟狀態(tài)。可失敗的意思是激活函數(shù)要敢于拋異常。很多人寫插件時喜歡把所有異常都吞掉用catch (e) {}把錯誤壓下去然后return一個成功狀態(tài)。這樣做表面上讓激活流程成功了但功能模塊實(shí)際處于半初始化狀態(tài)后續(xù)調(diào)用必然出詭異問題。寧可讓激活失敗、讓宿主跳過你也不要用一個虛假的成功掩蓋問題??苫謴?fù)的意思是插件要盡量在激活失敗后清理自己已經(jīng)產(chǎn)生的副作用。比如你已經(jīng)注冊了某個事件監(jiān)聽器然后后續(xù)初始化失敗了最好在返回失敗之前把監(jiān)聽器移除掉。不然下次重試激活的時候監(jiān)聽器會疊加成一個副本行為可預(yù)測性大幅下降。7.3 異步初始化必須有明確的超時和取消機(jī)制假裝沒看到這個建議的人大概率會寫出讓用戶崩潰的插件。異步初始化里最常見的坑是激活函數(shù)拉取遠(yuǎn)程配置結(jié)果遠(yuǎn)程服務(wù)掛了插件就一直掛在 pending 狀態(tài)宿主卡在啟動階段用戶看到的就是一個轉(zhuǎn)圈轉(zhuǎn)個不停的應(yīng)用。好的插件設(shè)計(jì)絕對要自己做超時控制export async function activate(host: Host): Promisevoid { const controller new AbortController(); const timer setTimeout(() controller.abort(), 5000); // 5s 超時 try { const config await fetchRemoteConfig({ signal: controller.signal }); host.registerConfig(config); } catch (error) { if (error.name AbortError) { throw new Error(activate: remote config fetch timed out after 5s); } throw error; } finally { clearTimeout(timer); } }這段代碼里我做了三件事給網(wǎng)絡(luò)請求掛了一個 5 秒的取消信號超時之后主動中斷在超時的情況下拋一個明確的錯誤讓宿主知道這個插件激活失敗的具體原因在finally里清理定時器。同樣邏輯可以推廣到數(shù)據(jù)庫連接、文件讀取、嵌套插件調(diào)用等所有異步操作。7.4 主動聲明依賴但別把依賴當(dāng)作保姆插件對宿主能力的需求最好通過元數(shù)據(jù)主動聲明出來而不是等運(yùn)行時發(fā)現(xiàn)缺了什么才報(bào)錯。在 Harness 這類支持顯式依賴的體系里你應(yīng)該寫成{ id: my-plugin, dependencies: { linxin666/dsh-p: ^2.0.0, core-utils: 1.4.0 } }依賴版本號別用*或者不加約束那是給自己埋雷。但反過來依賴也別聲明得太貪婪——不是每個插件都需要一大堆基礎(chǔ)庫。盡量依賴宿主已經(jīng)暴露的通用能力減少外部依賴的數(shù)量這樣整體穩(wěn)定性會高很多。我自己寫插件時的原則是能用宿主提供的能力絕不自己引入第三方庫。宿主里的公共庫版本統(tǒng)一由宿主管理是最省心的方案。7.5 最后給你的插件做一次客戶端視角冒煙測試Emit 上線之前我強(qiáng)烈建議做一個最簡單的冒煙測試裝在一個干凈環(huán)境里只加載你一個插件觀察激活日志然后跟其他插件共存觀察依賴解析最后再模擬一次宿主核心升級的場景確認(rèn)你的插件兼容性不會突然斷裂。這輪冒煙測試做下來你已經(jīng)提前替用戶踩過了一遍最常見的坑。反過來從一個普通使用者的角度看如果你只是想解決今天報(bào)的錯把所有排查手段濃縮成一句話就是別被最終報(bào)錯迷惑順著日志往前翻找到真正的第一條錯誤剩下的大多數(shù)問題都是連鎖反應(yīng)。插件世界沒有魔法破壞依賴鏈的任何一個環(huán)節(jié)都會在最終的did not activate上暴露。你只要耐心把鏈條重新接上它就能恢復(fù)運(yùn)轉(zhuǎn)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
丁香六月亚洲| 五月天丁香成人社| 婷婷中文字幕| 婷婷爱综合| av操逼网| 色婷婷亚洲婷婷| 亚洲婷婷五月天综合| 日本乱子人伦在线视频| 天天操屄网| 久久婷婷色色| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 另类激情五月| 99噜噜噜在线播放| 99热线观看9| 色情婷婷| 婷婷综合网| 激情丁香九九五月综合网| 99热精品在线播放| 国产精品久久久海的味道| 九九AV| www.色五月| 日本操B视频| 综合五月草| 综合久久五月| 666555。COm毛片| 丁香五月宝贝激情网| 婷婷色情五月| 99热每日| 亚洲三级无码| 亚洲综合另类| 九九热九九| 十一月婷婷激情四射| 996er在线观看| 一婬一伦一区二区三区| 香蕉色色网| 婷婷色网| 免费观看18视频网站| 狠狠色成人影片| 九九家庭影院| 五月天激日本色情在线| 久久只有这里精品免费| 91人人爽狠狠狠| 丁香影院五月综合| 国内久久婷婷| 九九九九中文字幕| 九九中文色色| 风流少妇A片一区二区蜜桃| 欧美综合在线五月天色婷婷| 婷婷五月天成人动漫| 成人中文字幕在线| 99热在线中文字幕| 翔田千里 50岁 无码| 99热伊人综合| WWW.久久久久久久久久久久久| 1024在线一区| 在线观看视频1区| 五月综合激情婷婷六月色窝| 一本色综合色| 欧美,日韩成人在线| 久热这里| 东北熟女视频99| 国产精品人人做人人爽人人添 | 天天操天爱综合| 婷婷四月 成人 狠狠干| 六月婷婷视频| 婷婷色Av| 五月丁香淫淫婷婷婷| 思思久久精品视频| 色5月婷婷| 五月婷激情| 国产成人精品一区二三区熟女在线| 99热播放| 开心激情婷婷| 色色婷婷五月| 五月丁香色停停啪啪啪| 永久天堂日本| 操逼六区| 99热6这里之有精品| 九九激情网| 91性高潮久久久久久久久| 久久久久网站| 久久综合网免费视频| 另类激情五月天。| 欧美天天干天天草| 婷婷丁香五月亚洲17cao| 亚洲热热视频| 婷婷六月天| 丁香五月大香蕉| 国产 码在线成人网站| 婷婷爱五月天| 91呦呦呦| 日韩一级片| 婷婷黄色| 五月婷婷之激情五月| 久久婷婷六月综合资源| 99色视频在线| 色五月亚洲| 国产又黄又爽又色的免费| 大香蕉综合视频在线| 99日热在线视频| 婷婷色综合中心站| 丁香亭亭久久| 美女五月天| 色老久久| 久久免费高| 五月丁香婷婷老司机| 婷婷丁香视频| 五月夜丁香| 丁香五月婷婷手机| 中文字幕黄色片| 久久大香蕉丁香| 色婷婷另类| 色婷婷丁香综合中文字幕| 天天爽夜夜爽夜夜爽精| 久久思思热| 26uuu精品一区二区| 九九热在线精品视频| 任你弄在线视频免费| 久久久五月婷婷| 五月天社区| 日韩婷婷| 日日干天天爽| 精品香蕉99久久久久网站| 五月精品99综合| 日韩不卡DvD| 激情深爱婷婷网| 色婷亚洲| 九色成人AV在线| 九九99精品| 天天舔天天插天天干| 91AV婷婷| 久久精品五月天| 五月婷色| 99亚州综合精品成人网| 成人电影AV在线观看| 婷五月天在线草| 丁香五月欧美| 色色色天堂网| 婷婷综合五月天亚洲综合| 欧美日韩99| 月丁香久久久| 五月丁香六月欧美综合网站| www.韩日视频| 五月丁香激情深爱婷婷| 在线精品97| 婷婷五月天丁香花| 99色亚洲| 亚洲中文丁香| 香蕉久久国产AV一区二区| 中文字幕欧美精品久久| 精品人妻久久久久| 久久丁香网| 婷婷激情鹿城五月天| 色色色99| 天天狠天天狠| 99热免费| 五月婷婷久久综合| 久久丁香五月婷婷| 中文字幕永久在线| 天堂综合久久 | 深爱五月天天| 1024人妻无码中文字幕| 天天射天天射一道本日本社区| 婷婷狠狠操| 67194线路二在线观看| 欧美激情 日韩无码 婷婷 五月天| 激情五月天啪啪| 激情文学 综合 九月| 五月丁香婷婷人体| 久热天堂| 婷婷亚洲综合| 色狠狠狠干| 色五月婷婷丁香五月| 九九99九九99| 午夜天堂一区人妻| 丁香婷婷在线| 开心五月婷婷婷美女| 五月天婷婷成人资源站| 五月丁香婷婷激情图片| 男人的天堂五月丁香| 亚洲Av成人在线观看| 五月婷亚洲精品| 九月性爱网| 可以看的AV| 亚洲视频无| www.久久av.com| 欧美电影在线播放| 五月天色五月天| 亚洲成人AV电影在线| 久久五月天激情视频| 日本熟妇乱妇熟色A片蜜桃| 婷婷免费精品视频| 少妇AB又爽又紧无码网站| 欧洲亚洲最新精品| 搡BBBB搡BBB搡18 | 天天日夜夜草进麻麻的子宫| 亚洲 成人 电影av在线观看| 五月婷婷av| 欧美一级色| AA丁香综合激情| 桃色五月婷婷| 日噜噜色| AA丁香综合激情| 日日夜夜小色哥| 99久久婷婷五月| 婷婷丁香五月麻豆| 丁香五月在线观看| 99re思思精品在线观看| 异能之下短剧免费观看全集| 9久热在线视频| 久久99热免费最新版| 人妻激情综合| 久久婷鲁| 1024国产| 亚洲综合狠狠艹| 欧美日比视频| 青青久久五月| 婷婷五月天AV| 色情五月综合婷婷| 亚洲尤物在线| 欧美图片丁香五月天| 久久ab| 深爱五月最新网址| 狠狠五月丁香色婷| 4399在线观看免费毛片| 色一色综合| 天天拍天天操| 天天色综合综合| 五月天丁香综合久久国产| 丁香五月在线观看| 91ncm视频| 丁香五月98| 久久久久网站| 自拍视频在线观看9| 日韩无码色色| 亚洲视频操| 这里只有国产精品在线| 久久婷婷五月综合97色一本| 丁香五月手机在线| 色丁香五月婷婷综合久久| 色五月婷婷av| 天天肏屄夜夜爽| 色综合久网| 激情综合五月天| 337午夜福利| 9.1综合网| 美女伊人久久| 热婷婷久| 五月情涩综合婷婷| 精品国产a| www.久久| 久久视频在线视频| 亚洲乱码日产精品BD| 婷婷丁香五月综合| 成人 在线 日韩| 思思 热 99| 色高清无码视频| 天天射影| 色五月xxx| 草综合网| 激情涩涩网| 99自拍视频网站| 色婷婷最新域名| 婷婷五月综合国产精品| 久久大香蕉丁香| 99精品国产在热久久| 五月婷婷无码| 伊人五月天| 五月丁香婷婷色| 91日本在线观看| 激情五月综合亚洲另类| wwwwww.色| 互月天综合| 婷婷五月情色| 日韩精品色| 天天激情夜夜干| 日韩免费乱轮网站| 99色色最新视频| 天插天啪天啪天啪| 色婷婷丁香| 开心五月天激情网站| 婷婷六月久久| 自拍盗摄 另类| 五月婷婷狠天天色综合| 玖玖精品视频99| 狠狠色综合777| 免费99情趣网视频| 初夜av| 天天射夜夜骑| 婷婷五月天AV| 久久人操| 色色色色色色综合网| 熟妇人妻中文字幕无码老熟妇 | 98国产精品综合一区二区三区| 色婷婷电影网| 久久中文网| 色yeye色综合| www.99在线| 五月丁香在线视频观看| 五月激情婷婷播播网| 色五月丁香六月婷婷| 丁香狠狠色婷婷久久无码视频| 无码橾| 亚洲无码99| 亚洲精品无码99热| 99操免费视频| 丁香久久五月天视频在线观看| 婷婷五月花西瓜| 色五月偷偷| 久久激情综合| 亚洲AV电影美洲AV电影| 免费AAAAA网| 六月丁香婷婷色69| 五月丁香天堂网| 国产又色又爽又黄又免费| 操逼视频网址| 五月婷婷开心深| 久久精品亚洲热| 操日视频| 91免费试看| 婷婷亚洲色| 天天夜天天色天天| 久久婷色| 久99久在线| 天天日天天干天天插天天射| 婷婷综合视频| 五月狠狠| 六月丁香社区| 99无码视频| 七七久久婷婷| 久久婷出差欧美色两性综合网| 激情五月综合| 国产亚洲在线观看| 亚洲99在线| 五月天成人伊人| 综合XX网| 色五月激情五月| 99日精品视频| 婷婷精品性视频| 97人人操人人| 91疯狂操操操操| 26uuu激情五月天| 99热国产精品| 99久在线精品99re5热视频| 天天婷婷天天| 九九色热| 久久中文人妻系列| 日韩欧美颜射| 五月天丁香成人| 人人做人人看人人摸| 九九久久网| 激情图片婷婷丁香五月| 综合在线色婷婷| 久久五月婷婷综合网| 丁香九月激情| 天天做夜夜爽| 日本99热| 色婷婷丁香| 欧美在线看| 五月丁香综合激情| 激情啪啪五月| 超碰9| 久久久人人操A V| 夜夜操少妇| 99re这里只有| 色五月激情| 九九大香蕉黄色影院| 99re久热| 玖玖热视频| 人人人操 超碰| 婷婷色香六月综合激情| 狠狠操狠狠色| 婷婷.com| 免费人人操| 色噜噜五月天| 久久久潮喷-久久久九九-成人AV| 五月丁香婷婷成人网| .青娱乐天天操B| 啪啪干伊人婷婷| 538在线精品| 九九草热在线观看| 大鸡巴伊人网| 综合久久99| 国产婷婷久久| 日韩999| 久婷婷| 99视频精品在线| 婷婷色婷婷亚洲成人| 人妻操逼视频| 精品九九视频| 五月亭亭色| 在线观看亚洲视频影院| 久久五月婷| 欧美性猛交99久久久久99按摩| 五月色丁香婷婷中文字幕| 无码视频国内精品久久久| 婷婷五月激情欧美大胆视频| 色五月婷婷综合在线| 99视频内射三四| 成人色五月天| 91色碰| 一区二区乱码视频| 婷婷五月丁香色情| 婷婷伊人视婷婷婷| 色婷婷久久| 99热欧| 婷婷久久天堂网| 欧美色五月| 狠狠va| 亚洲婷婷丁香五月| www.婷婷| 一级黄色尤物综合视频手机在线观看| 亚洲va欧美| 99国产在线精品视频| 99热.com| 激情五月天婷婷久久久久久久久久久 | 成人亚洲精品久久久久| 深爱五月婷婷| 久久综合网免费视频| 九九精品re免费视频| 91视频五月丁香| 久操大香蕉| 99精品成人无码A片观看金桔| 天天综合网亚洲网站| 日本97在线视频| 99在线精品免费视频| 26UUU欧美| 色五月婷婷中文字幕| 激情六月婷婷啪啪| 人人97碰| 丁香六月综合激情| 国产一级婬片毛片| 九九精品热| 久久综合最新网址| 嫩草AV久久伊人妇女超级A| 99视频在线精品免费观看2| 天天拍夜夜撸| 久久久婷婷色五月资源网| 亚洲综合五月| 丁香五月婷婷狠狠色| 大香蕉精品视频| 大香蕉婷婷五月天| 91人妻PORNY九色大屁股| 亚洲色婷婷激情| 日日躁夜夜躁狠狠久久AV| 人妻系列久久久久久久久久久 | se色综合网| 996er热| 激情五月天视频| 婷婷五月天小说网| 操逼在线视频| 色九九九综合| 色综合99| 丁香婷婷五月综合影院| 九九热青青草| 激情久久综合| 99热这是里只有精品| 亚洲欧洲中文日韩久久AV乱码| 国产热精品| 就去色色五月丁香婷婷久久久| 人人摸人人摸| www久久五月com| 无码成人AAAAA毛片AI换脸| 第四色婷婷五月| 五月婷婷亚洲综合在线| 亚洲丁香五月天视频| 色情丁香五月婷婷精品| 这里只有精品视频| 五月网在线| 任我鲁这里有精品视频| 亚洲中文字幕在线观看| 国产精品VA在线| 碰碰女| 色色亚洲| 久久艹99| 天天摸日日舔狠狠添婷婷婷| 91九色中文字幕女在线观看| 亚洲乱码日产精品BD| 婷婷五月天免费视频| 激情综合网五月丁香| 无码日本精品XXXXXXXXX| 色五狠狠| 精品在线| www.色九月| 五月天社区| 丁香六月无码播放| 久久er这里只有精品| 婷婷狠狠青青| 在线只有精品| pacopacomama 070722_670 素人奥様初撮りドキュメント 103 大久保純子 | 殴美97色| 色五月亚洲| 婷婷色五月天在线| 亚洲综合网激情小说| 99综合成人视频在线观看| 婷婷六月综合激情| 十一月婷婷激情四射| av中文在线| WWW.五月com| 狠狠干在线| 久久只有18视频| 人妻射精AV| 91日视频| 丁香社92视频| 欧美激情综合五月色丁香| 九月婷婷激情| 日日艹思思热| 狠狠久久婷五月综合色| 久婷| 99视频九九热| 1999天天操夜夜操| 桃色五月婷婷| 熟妇人妻中文字幕无码老熟妇| 久热免费视频| 五月婷激情| 久久成人精品视频| 丁香久久五月天视频在线观看 | 综合色七七| 丁香五月激情综合| 日韩成人精品中文字幕| 午夜成人网站在线观看| 色五月婷婷基地| 99热777| 噜噜噜狠狠色综| 五月亭久久无码视频| 嫩BBB搡BBBB榛BBBB| 色婷婷丁香网| 婷婷五月综合网| 男人視頻站| 伊人激情网| 五月天婷久久| 97日韩无套内| 中文字幕操比影片| 婷久久久| 色色丁香婷婷五月天| 国产伦亲子伦亲子视频观看| 色色欧美。| AA片在线观看视频在线播放| 思思久久99热只有频精品66| 亚洲色无码A片一区二区麻豆| 最近中文字幕大全免费版在线| 亚洲中文乱字字幕在线永久| 色婷婷AAA| 欧美在线操| 九九视屏| 五月丁香久久久久| 激情六月丁香| 色色99| 婷婷五月在线观看| 亚洲色五月| 五月激情六月综合| 91超碰人人操| 国产99久久久国产精品免费看| 无码色色色| 久久99热这里只有精品| 色色婷婷丁香| se色婷婷视频| 91精品国产色猫| 久久五月天激情婷婷| Caoporn公开| 热九九九九| 欧美人久久| 碰碰女| 欧美色婷婷| 蜜乳.comcom| 五月婷婷成人w| 亭亭五月天黑人2014| 涩涩涩.com| 黄色99网| 亚洲精品乱码久久久久99| 久久99网站| 男人的天堂999| 五月婷婷在线视频免费观看| 婷婷涩五月天综合| 五月综合激情网| www.色五月.com| 俺去也五月天| 疯狂做受XXXX高潮A片| 国产亚洲精品AAAAAAA片| 色婷婷五月天| 日韩小视频在线99| 伊人狠狠丁香婷婷综合尤物| 成人五月天综合网| 日日夜夜狠狠干| 久久丁香五月婷婷| 天天综合干| 人操91在线| 综合久久97| 亚洲精品成人| 97色色色色色色色色色色色色色| 99精品大片| 色色丁香五月天| 日本天天综合| 色色网站在线| 五月丁香激情综合网| 亚洲无AV在线中文字幕| 婷婷综合日本| 伊人丁香六月婷婷| 99久在线精品99re8热| 激情五月天色网站| chaopeng在线人人| 天天色丁香| 婷婷色五月亚洲| 色综合激情| 婷婷六月色| 激情6月| 爽极品色| 色丁香婷婷| 五月丁香六月色| 另类五月激情| 五月婷婷在线丁香| 欧美va在线| 婷婷激情啪啪| 超碰在线观看9| 国产99热| PORNY九色9l自拍视频成人| 99热精品在线播放观看| 播五月开心婷婷欧美综合| 婷婷综合激情| 99热精品观看| 婷婷五月深爱五月| 色丁香五月天| 九九热青青草| 97婷婷丁香五月天激情图片| 久久精品视频99| 午夜在线成人网站免费观看| 久久99热免费| 狠狠色综合网| 人人操 色| 五月综合缴情网| 久久这里只有精品热在99| 天天射色五月天| 人妻videos人妻高清| 婷婷五月丁香久久| 久久青青日本视频| 天天爽天天干天天| 激情婷婷五月天在线观看| 丁香五月AV| 精品无吗va视频免费观看| 久久9热| 97在线观视频免费观看| 婷婷五月激情小说| www天堂99| 99精品视频在线6| 91日本在线| 丁香六月啪啪| 欧美久热| 九月婷婷激情| 国产资源91在线| 五月天婷婷基地综合网| OYIWbGcPu8H| 99热手机在线精品| 五月天精品| 26uuu欧美激情另类| 色色五月婷| 激情久久 婷婷| 中文字幕乱码亚洲精品一区| 99这里有精品视频| 97丁香婷婷| 九九热在线观看视频| 亚洲色综合性| 蜜乳国产网站| 激情综合激情五月| WWW,色五月| 色玖玖| 操碰91| 综合成人小说婷婷| 色色婷婷色色| 婷婷五月天网址| 欧美一线视频| 五月天丁香成人| www.色综合.com| 91精品无码| 91成人品| 99在线精品免费视频| 狠狠色丁香99| 精品一二三区久久AAA片| 丁香五月天欧美在线| 五月综合六月婷婷| 成人AV播放| www.开心激情| 日本三久久| 天天色丁香| 欧美操人| seav天堂| 99久久网站| 99视频网址| 九九人妻福利| 先锋五月婷婷丁香草草| 色婷婷五月天中文字幕| 婷婷九月丁香中文| 五月婷婷久草在线视频综合| 一操久久| 婷婷五月激情丁香| 天天射射夜| 婷婷日本在线| 人人妻人人澡| 一本久久亚洲五月婷婷| yw国产AV| 国产成人+综合亚洲+天堂| 国产99精品免费视频| www五月婷婷88导航| 天天激情| 婷婷久久五月| Blackedraw视频一区二区| 亚洲六月色| 久久久香| 亚洲99热| 大香蕉婷婷久久| 99 re视频一区| 99无码视频| 日韩六六久久电影| 丁香五月宝贝激情网| 色五月婷婷大| 99久在线精品99re8热| 亚洲性爱电影| 专区无日本视频高清8| 激情玖玖综合网| 99热天堂| 色五月开心开心五月激情五月| 激情色视频| 欧洲色| 天天色激情| www.婷婷五月天.com| 岛国在线观看91| 久久99大全| 久久五月天黄色五月天色网址| 久久一品区| 综合色色婷婷| 四色AVwww| 啪啪啪大香蕉| 欧美日韩国产成人在线| 伊人久久婷婷| 色婷婷久久| 天天爱天天做天天舔| 五月婷婷啪啪| 99热只有精| 色综合久| 五月久久网| 五月天色小说| 成人精品在线观看| 亚洲色另类| 五月天久久成人| 激情久久久久久| 日本99婷婷| 亚洲亚洲人成综合网络| 九九色影院| 99热官网| 五月婷在线| 大香蕉久久综合网| 婷婷丁香五月av| 色色com| 三级黄色大片视频| 丁香五月天天| 色五月激情网| 一根材五月婷成人| 99久热这里只有精品视频删减版| 丁香婷婷五月综合| 色色色色色九九九九九| 欧美黄色一级录像| 狠狠狠狠狠狠| 99热手机在线精品| 色婷婷综合久久久久| 久久久这里有精品| 狠狠色综合五月| 99久久思思| 99'无码| 开心婷婷中文字慕| 99操逼| 99热免费精品| 啪啪东京热| 日本人妻操| 婷婷五月天亚洲综合网| 91丁香色| 亚洲综合色婷婷文学| 国产又色又爽又黄又免费| 色综合五月| 日日操夜夜爽| 五月丁香综合激情| 色久丁香五| 婷婷五月丁香六月| 激情五月天开心| 女人天堂久久| 五月天成人综合| 涩综合在线| www.激情五月天。com| 色婷婷久久综合| 呦呦v线| 久久婷婷五月丁香蜜桃网| 国产一区男女| 久久98| 五月婷av| 激情伊人五月天| av性爱在线| 开心五月深爱婷婷| 五月天婷婷在线播放| 婷婷五月天性| 99热6色| 99精品网| 97人人操人人爽| 国产成人+综合亚洲+天堂| 97九色| 婷婷久久综合| 黑人糟蹋人妻HD中文字幕| 国产成人精品亚洲线观看| 99re6在线视频精品免费| 午夜性做爰电影| 97精品人人A片免费看| 久热伊人91| 超级碰碰视频无码| 操比激情五月综合| 久久婷五月婷| 丁香五月婷婷性爱| 色区域网站视频| Www.狠狠| PORNY九色9l自拍视频成人| 色播五月网| 五月丁香啪啪| 超碰人妻公开在线| 五月婷婷伊人在线| 日本综合99| 激情丁香五月婷婷| 国产日批视频免费播放| 性做久久久久久久免费看| 婷婷久久大香蕉| 亚洲乱码日产精品BD| 久久婷婷一级片| 九九99热| 九九爱这里只有精品| 久久九九99字幕| 欧美精品18| 天天日,天天干,天天操| 国产精品18久久久| 色色色婷婷| 天天开心天天色| 97人人操人人操人人操人人| 欧美色久| 69午夜成人影片| 人妻少妇色综合| 丁香五月天网站| 国产欧美熟妇另类久久久| 丁香熟女乱| 婷婷综合欧美| 五月婷在线播放| 婷婷操逼| 亚洲一二三网| 婷婷久久综合久| 婷婷六月天亚州| 色五月婷婷五月丁香五月| 日本久热| 婷婷综合九色伊人| 日本高清久久| 天天夜夜爽| 玖玖在线资源视频| 九月性爱网| 丁香六月色婷婷| 色婷婷九月| 五月天狠狠网站| 五月婷婷久久激情| 97影院一级片| 国产成人综合亚洲| 色V狠狠的干| 99视频这里有精品免费观看| 99免费在线| 被强行糟蹋的女人A片| 久久WW| 五月婷婷影视| 天天操天天操天天操天天操天天操| 婷婷综合干| 思思热久在线观看视频| 14色综合婷婷| 丁香五月色情av| 久久机热这里只有精品免费视频| 婷婷五月婷婷| 538在线精品| 9l视频自拍9l九色成人| 丁香激情综合| 免费视频无码| 久热这里只精品| 久狠日av| 黄急一级视频| 五月天婷婷黄色视频| 人人爱人人添| 涩涩五月天| 大香蕉啪啪啪| 99热这里只有精品最新网址| 五月色精品| 五月色婷婷综合丁香精品无遮挡| 婷婷五月激情综合| 婷婷久久亚洲| 五月丁香无码| 色婷婷88| 五月丁香啪。| 99国产性感视频| 亚洲情综合五月天| 婷婷激情综合| 91丨九色丨丰满人妖| 丁香婷婷婷| 色婷婷五月天成人网| 丁香五月手机在线| 婷婷人人操| 天天噜| 操日本色| 999热在线视频| 久99久视频精品| 99视频久久免费视频| 超碰碰碰碰| 超碰在线观看9| 激情五月婷婷在线观看| 婷婷五月丁香综合桃花色网| 六月婷婷九月丁香亚洲综合| 97碰碰草| 天天综合网亚洲综合网| 婷婷五月亚洲综合| 丁香色综合| 日韩在线99| 久久精品系列| 97色色色| 欧美丁香五月97色| 五月婷婷影院| 啪啪99| av在线观看免费| 亚洲视频二区| 欧美成人精品A片免费一区99| 亚洲国产精品成人免费一区久久久在线观看AAAA | 五夜丁香| 色婷婷天堂| 深爱五月月天| 婷婷激情五月综合丁香社| 婷婷激情丁五月| 中文幕无线码中文字蜜桃| 四虎婷婷五月天| 亚洲亚洲人成综合网络| 毛片新网地| 欧美毛片www| 亚洲色色香蕉| 另类综合激情| 无码激情AAAAA片-区区| 第四色色色色色丁香五月天| 影音先锋四区| 婷婷五月天无码熟女| 日韩av网址大全| 九九色综合网| www.夜夜操| AVDV久久| 五月丁香啪啪综合| 婷婷综合九色伊人| 日日操夜夜操无码免费| 色综合香蕉| 99er免费在线观看| 亚洲第一第二网站| 国产毛片精品一区二区色欲黄A片| 天天揷综合网| 天天干,天天操,天天射| 婷婷色婷婷亚洲成人| 华人在线免费| 欧美黄色AA片哗啦啦啦| 天天日综合| 五月天丁香花婷婷| 影音先锋按摩| 婷婷开心激情| 另类在线| 久久伊人9| 五月激情精品视频| 99热久草| 玩熟女五十AV一二三区| 五月天第四色开心色播| 啪啪五月婷婷| 91碰碰视频| 中文字幕丁香五月| 99视频综合网| 久久久激情| 国产又黄又爽又激情不遮挡视频在线观看| 丁香久久激情俄| 婷婷伊人綜合中文字幕| 激情另类综合| 99精品网址| 97视频久久| 99热这里有精品2| 99免费青青蜜臀| 激情深爱五月天| 五月丁香六月综合激情无码软件亮点 | 大香久久伊人网| 激情五月综合网| 国色天香伊人狠狠色| 国产精品人妻在线网址| 99精品成人无码A片观看金桔| 色婷五月天激情| 五月丁婷香| 99视频在线看| 影音先锋四区| 婷婷免费无视频| 丁香五月天社区| 99精品国产乱码久久久人妻| 五月天婷婷基地| 99久在线| 五月丁香婷婷成人版| 五月婷婷丁香色吧网| 国产亚洲精品AAAAAAA片| 五月天色色婷婷| 少妇性按摩无码中文A片| 日韩精品一品二区三区的使用体验| 精品网站99| 免费看片操逼| 一点色成人网| 色婷婷综合久久久久| 五月婷婷婷婷婷| 99久久久国产大片区| 91chinese 在线| 亚洲第一成人无码A片| 高清视频一区| 亚洲欧美999| 狠狠色狠狠鲁| 激情四射五月天| 久久人操-久草婷婷-成人AV| 三年高清大片免费观看国语| 五月激情丁香六月狠狠干| 五月天基地| 色九四色| www.久久爱| 九九色精品| 五月天婷婷爱| 九九爱看亚洲| 毛片网站谁有| 97狠狠碰| 婷婷婷婷婷婷婷婷婷婷丁香| 噜噜视频| 日韩欧美一级大黄网站| 婷婷五月丁香av网站| 亚洲综合成人网站| 日韩成人影片网站| 99亚洲精品| 丁香九月婷| 婷婷色在线播放| 思思热国产在线| 99在线国| 亚洲婷婷丁香五月亚洲| 激情五月天婷婷直播| 极品九九九九九九| 婷婷久久五月天亚洲欧美国产日韩在线观看 | 亚洲激情五月天| 激情久久丁香| 色亭亭丁香五月天| 超碰操网| 四色永久成人网站| 女人天堂AV| 婷婷五月花| 激情文学五月丁香六月婷婷| 深情五月天| 久久这里只| 五月婷精品| 99综合一区| 天天夜夜六月丁香五月婷婷老师| 色情五月天se| 先锋av性爱成人电影| 99这里的视频都是精品| 婷婷色色综合激情| 久久色五月天| 久久与婷婷| 99热99日…..| 五月丁香婷婷综合激情基地| 99热20| www.久久66| 天堂五月婷婷| 99热精品一| 这里只有免费的精品| 婷婷五月18永久免费视频| 六月亭亭久久综合激情| 99热日韩| 五月天综合婷婷| 五月婷婷免费在线视频| 五月亭亭网成人在线视频| 日本色综合| 色婷婷精品视频| 九九99九九99| 五月天另类小说| 丁香六月婷婷久久综合| 五月丁香| 裸体做A爰片毛片A片免费| 丁香五月天激情| 免费看欧美成人A片无码| Blackedraw视频一区二区| 五月天激情美女久久| www.夜夜| 九九干视频| 丁香婷婷五月| 丁香婷婷久久| 丁香婷婷久久| 九九综合久久丁香婷婷,开心激情综合网| 丁香六月五月天| 99热这里只有免费精品| 丁香亚洲色综合| 奇米影视777在线_在线观看午夜_h小视频在线观看_岛国大片 | 精品夜夜澡人妻无码AV| 婷婷大香焦| 国产在线视频1234| 9有码中文| 婷婷五月激情的图片| 丁香五月98| 天天天操天天天日| 婷婷丁香五月麻豆| 色五月综合网| 天天肏天天舔AV| 亚洲欧洲午夜成人精品av| 丁香五月激情六月欧亚激情综合导航| 77799热| 天天日日综合| www九九| 在线看九一V图片| 五月天婷婷激情六月久久| 亚洲色综合| 色五月婷婷影院| 日韩欧美四五区| 激情五月深爱五月| 丁香 久久| 伊人五月综合网| 99色综合久久| 亚洲精品久久久久久久久久飞鱼| 91九色精品熟女内射| 另类 在线| 激情深爱五月| 婷婷五月天偷拍| 婷婷精品视频| 久久色天堂| 丁香婷色| 狠狠色丁香婷婷久久综合| 久久99日本精品视频免费观看| 成人国产欧美大片一区| 五月天婷婷久久| 激情AV| 五月丁香六月在线| 开心五月综合激情网| 日韩精品一区二区亚洲AV观看| 五月婷婷六月丁香在线视频| 激情美女五月天激情在线| 久久停停超碰| 丁香成人五月天| 日本人妻A片成人免费看片| www.久久99热地址发布| 性热视频99精品| 欧美WW在线网| 人人操女人| 中文字幕,综合,91| 97婷婷狠狠| 婷婷五月丁香六月| 六月婷婷色五月| 色欲天天综合网| 婷婷五月丁香性爱| 日本va网站| 久久五月天视频| 亚洲区在线| 99在线观看亚洲| 天天综合色| 亚洲99精品九九在线| 国产 码在线成人网站| 五月婷婷av| 一本大道伊人AV久久综合| 五月婷婷久久综合| 日本丁香五月| 99久久99综合| 99区视频| 99操逼| 久久9999| 操逼棍操逼| 欧美韩日AAA网站| 亚洲成人五月| 国产成人一区二区三区在线观看| 中文无码婷婷| 免费不卡狠操美女视频网| 中字幕视频在线永久在线观看免费 | 青柠影视免费高清电视剧 | 99人人干人人| 婷婷五月天亚洲图片| 天天日天天操心| 久久婷婷网| 九九视屏| 久re热视频| 人人视频色| 一级AV片| 怡红院99| 亚洲精品视频在线播放| www.射伊蕉婷婷| 激情五月天之五月婷婷| 五月天婷婷中文字幕在线播放| 色五月开心开心五月激情五月| 91操片| 成年视频免费观看| 激情五月天伊人av| 思思久久99| 婷婷性爱| 久久激情网| 成人婷99最新| 久久婷婷91| 激情五月婷婷啪啪| 韩国天天婷婷| www网站在线观看| 激情五月天色婷婷综合| 国产黄色在线| 色青青视频| 91.www综合| 深爱激情中文五月天av| 99亚洲精品视频| 天天插天天插天天操| 亚洲中文字幕AV| 淫视馆aV二区一区| 91操熟女| 开心五月六月婷婷| 99热婷婷| 色色色在线免费视频| 99热色精品| 丁香九月综合| 久久婷婷六月综合| 丁香五月婷婷六月婷| 国产毛片精品一区二区色欲黄A片| 五月天激情偷拍| 色色五月天婷婷| 丁香五月婷婷六月婷| 亚洲日韩操B| 色爱终和网| 激情综合另类| 这里只有精品免费| 亚洲 视频 导航 一区| 爱操人妻| 婷婷丁香社区网| 少妇高潮呻吟A片免费看软件 | www.minyis.com【JT】实力收量可预付TG@LXSPSW8 | 亚洲偷| 丁香五月乱中文字幕| 一级韩国产精品毛| XX色综合| 九九99九九99| 91丨九色丨43老版熟女| 婷婷丁香五月天综合网| 桃色五月婷婷| 五月婷婷在线综合| 激情五月天网| 视频一区二区在线| 2050人人操免费工开爱| 亚洲综合99| 国产免费一区二区三州老师F1……| 天天搞夜夜叫| 超碰在线人妻| 五月丁香综合影院| 五月天婷爱综合| 69人妻人人澡人人爽久久| 丁香婷婷六月天| 激情综合五月激情| 婷婷的五月天另类视频| 99视频精品在线| 久这里只有精品99| 99人妻碰碰久久久禁片| 亚洲精品婷婷| 五月丁香爱婷婷深深| 人人爽网| 99九九精品视频| 熟女色专区| 色婷婷狠狠禁久久| 99热国产精品| 六月婷五月丁香| 97干在线看| 婷婷99狠狠| 色五月丁香伊人| 99色婷婷视频| 午夜少妇在线观看视频| 色亚洲欧洲| 9九热视频|