LayaAirIDE與VSCode工作流配置

來源:https://mp.weixin.qq.com/s/rz0AxCcVG_ODGaYFtl0QuA?tdsourcetag=s_pcqq_aiomsg

VSCode高效開發工作流配置指南

原創: Charley [Layabox](javascript:void(0);) 今天

LayaAirIDE 2.4將VSCode剝離出去,其主要目的是讓開發者編碼工作流更加自由。比如 ,可以即時體驗到新版本的升級,無需受限于LayaAirIDE。可以通過VSCode來靈活配置自己的開發工作流等。

本篇指南文檔從最簡單的LayaAirIDE與VSCode工作流配置開始,逐步介紹一些高效開發工作流的常用配置方式。

一、前置準備

開發工作流,自然離不開工具的支撐,第一小節先羅列出基礎的必備環境工具。如果都已準備好,可以跳過本小節。

1.1、下載安裝LayaAirIDE

哪怕是將VSCode剝離出去,LayaAirIDE仍然需要下載安裝,這不僅是因為UI與場景的編輯以及項目創建需要用到LayaAirIDE。游戲發布的gulp配置js以及平臺配置json也必須是由LayaAirIDE生成的,哪怕是用命令行發布,對于不同平臺的js發布腳本及json配置 ,也是需要先在LayaAirIDE中生成一次,所以一定要下載LayaAirIDE。(本篇文檔是基于2.4.0beta版IDE介紹)

LayaAirIDE 下載地址:

https://ldc2.layabox.com/layadownload/?type=layaairide

1.2、下載安裝Node.js

Node.js 是我們日常開發的基礎環境,比如TypeScript編譯、npm都需要依托于 Node.js。

如果沒有安裝,直接前往node官網下載安裝即可,

Node.js 官網下載地址:

https://nodejs.org/en/

1.3、下載安裝VSCode

VSCode是一個應用廣泛的編碼工具,是本篇主要介紹的工具,對于TS與JS項目,推薦使用該工具。

VSCode官網下載地址:

https://code.visualstudio.com/Download

1.4、下載安裝chrome

chrome瀏覽器是LayaAir引擎推薦的運行調試環境,對于這個,開發者一般都會安裝。如果沒有,請下載安裝好。

chrome官網下載地址:

https://www.google.cn/intl/zh-CN/chrome/

二、LayaAirIDE與VSCode關聯設置

假如前置準備的工具我們都安裝好,這時,我們只需要做一個IDE的關聯,即可完成一個完整的開發工作流的配置。

2.1 最基礎的LayaAir工作流(面向VSCode新手)

關于創建項目、打開項目(管理項目)、編譯項目(F8)、運行調試項目(F6)、發布項目等都可以在LayaAirIDE中完成。

我們只需要把VSCode當成一個基礎的編碼工具,編譯與調試,不推薦在VSCode中進行(具體原因后面還會講)。

所以在開發的時候,需要打開兩個軟件,寫代碼在VSCode中進行,UI編輯與項目編譯及運行調試在LayaAirIDE中進行,兩個軟件,快速切換一下,即可完成一個從編碼到運行發布的完整工作流。

對于沒有VSCode使用經驗的開發者,這種模式是最容易理解和操作的工作流。

2.2 在LayaAirIDE中關聯VSCode

正常情況下,安裝好VSCode后,LayaAirIDE能自動找到安裝目錄進行關聯。然而也可能會有無法自動關聯的情況出現。

注:MAC版本,當前的2.4.0beta版有個BUG,必定沒辦法自動關聯。BUG已在2.4.0正式版中修復。

當無法自動關聯的情況出現后,點擊LayaAirIDE中的編輯模式按鈕時,如下圖所示,會彈出來工具路徑配置的頁面。

image

點擊瀏覽或者拖動VSCode安裝目錄的VSCode可執行文件,到工具路徑配置面板的第二個輸入框,再點保存。即完成了IDE與VSCode的關聯。

如果是AS語言的開發者,可以拖動FB或FD的可執行文件進行關聯。總之,第二行就是代碼編輯器可執行文件的啟動關聯路徑。開發者可根據自己的實際使用情況進行關聯。

需要注意的是,在LayaAirIDE 2.4.0beta MAC版里目前有個BUG,點瀏覽可能會無法選中可執行文件。開發者可以采用拖入可執行文件到該輸入框的方式進行配置關聯。(該BUG已在2.4.0正式版中修復)

2.3 修改IDE的關聯

如果開發者不小心選擇錯誤的目錄或者可執行文件,保存后,點擊LayaAirIDE左側的編輯模式按鈕,那就會直接打開錯誤的路徑。

修改的方法如下圖所示,在設計模式下,打開 菜單 -> 文件 -> 工具路徑配置,即可重新拖入正確的可執行文件到對應的配置欄目。

image

三、VSCode中斷點調試

LayaAirIDE剝離VSCode后,不再支持IDE內斷點調試,只能是外部的Chrome調試器中斷點。

如果開發者想在代碼編輯器中斷點調試,則需要在VSCode中配置好調試環境。

VSCode默認是沒有配置調試環境的,如果開發者沒有配置好,可根據本小節的指引,來安裝chrome調試插件(擴展)和配置launch.json來配置好調試環境。

3.1 安裝Debugger for Chrome

點擊左側導航面板的擴展(EXTENSIONS)商店圖標,然后在搜索欄中輸入關鍵字chrome,找到Debugger for Chrome點擊Install進行安裝(已安裝的不再顯示),操作流程的指引如下圖所示。

image

如果有開發者想使用VSCode中文菜單的,也可以搜索chinese,找到中文插件進行安裝,操作如下圖所示。

image

注:本篇文檔是基于已安裝了中文插件的window版VSCode進行截圖示例。

總之,以后想安裝什么插件,都可以在插件擴展商店中搜索查找及安裝。

3.2 啟動斷點調試及運行項目的流程

安裝完Debugger for Chrome插件后,

如果開發者采用的是LayaAirIDE 2.4.0beta 或更高版本創建的項目,LayaAirIDE在創建項目時會幫大家創建好VSCode調試配置文件 .vscode/launch.json

此時,先到LayaAirIDE里按快捷鍵F8編譯一下,然后回到VSCode再按快捷鍵F5,即可啟動VSCode中的斷點調試,以及調起Chrome,顯示運行效果。

經驗匯總:

這里重點強調一下開發者經常遇到的錯誤,那就是不編譯,安裝好Debugger for Chrome之后,直接F5調試,會出現如下圖所示的報錯。

image

這是由于F5只是調試的快捷鍵,必須要先使用LayaAirIDE的編譯(F8),編譯生成運行代碼后,才能使用VSCode里的F5斷點調試。

對于VSCode開發工作流不是特別熟悉的開發者,編譯方面一定要使用LayaAirIDE提供的編譯功能。不要使用VSCode中的tsc編譯任務,因為VSCode中的tsc編譯與LayaAirIDE的編譯及發布流程不一致,所以會有很多地方都要修改,編譯后才能運行成功,而且就算是在VSCode中運行成功了,如果修改的和LayaAirIDE流程不完全一致,也不能使用LayaAirIDE的項目發布功能。當使用LayaAirIDE提供的項目發布功能時,還是要用LayaAirIDE的編譯再重新編譯一次,才能發布成功。

3.2 配置launch.json

如果是LayaAirIDE 2.4.0beta版之前創建的項目,是沒有調試配置文件的。所以,當編譯后,在VSCode使用F5編譯時,會提示選擇調試環境,建議選擇Chrome作為調試環境,如下圖所示。

image

選擇之后,會自動創建調試配置文件 .vscode/launch.json ,并有一些基礎的配置信息。但這些并不夠用。最簡單的辦法是用 LayaAirIDE 2.4.0beta或更高版本IDE創建一個示例項目,把 .vscode/launch.json 文件復制過來替換即可。

launch.json 內容如下:

<pre class="" style="margin: 0px 0px 16px; padding: 10px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word; overflow: auto; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 12px; line-height: 1.6; font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; word-break: break-all; background: rgb(246, 246, 246); border-width: 1px; border-style: solid; border-color: rgb(221, 221, 221); border-radius: 3px; white-space: pre-wrap; text-align: left;">

  1. {

  2. "version":"0.2.0",

  3. "configurations":[

  4. {

  5. "name":"chrome調試",

  6. "type":"chrome",

  7. "request":"launch",

  8. "file":"${workspaceRoot}/bin/index.html",

  9. "runtimeArgs":[

  10. "--allow-file-access-from-files",

  11. "--disable-web-security"

  12. ],

  13. "sourceMaps":true,

  14. "webRoot":"${workspaceRoot}",

  15. "userDataDir":"${workspaceRoot}/.laya/chrome",

  16. "sourceMapPathOverrides":{

  17. "src/":"${workspaceRoot}/src/"

  18. }

  19. }

  20. ]

  21. }

</pre>

如果不想創建項目復制launch.json的,直接在.vscode目錄創建一個空文件launch.json,將上面的內容復制過去也是可以的。

在VSCode中打開launch.json,鼠標懸停到launch.json的屬性名稱上,可以查看當前屬性描述。

四、VSCode中調LayaAir命令行工具

在第三小節中,僅僅是實現了在VSCode中的斷點調試,編譯與發布還是要切到LayaAirIDE中進行。

有一些開發者,提出不切換,直接在VSCode中實現完整的編譯、調試、發布的需求。本小節將繼續進行指引。

4.1 安裝 layaair2-cmd 與 gulp

Layabox提供了layaair2-cmd命令行工具,通過這個工具,可以不打開LayaAirIDE,直接在VSCode終端命令行下對LayaAir引擎項目進行編譯,以及項目發布(HTML5、微信、百度等小游戲版本)。

安裝 layaair2-cmd

layaair2-cmd安裝的方式比較簡單,由于我們前置準備已安裝好了Node.js,所以直接在命令行終端模式下輸入 npm i layaair2-cmd -g 回車即可,安裝過程如下圖所示。

image.gif
安裝 gulp

要使用layaair2-cmd命令,沒有gulp環境,是跑不起來的,下圖的報錯,正是不支持gulp導致。

image

所以,我們繼續用npm來安裝gulp,在命令行終端模式下輸入npm i gulp -g 回車即可,安裝過程如下圖所示。

image

4.2 layaair2-cmd的使用

layaair2-cmd的使用很簡單,目前只有兩個功能參數, compile 與 publish ,分別是編譯和發布。

編譯命令

當我們想編譯項目時, 輸入 layaair2-cmd compile 回車即可。編譯效果如下圖所示。

image
發布命令

不僅是編譯,發布也可以通過命令行搞定。目前的發布類型為HTML5(web)、微信小游戲(wxgame)、百度小游戲(bdgame)、小米快游戲(xmgame)、OPPO小游戲(oppogame)、vivo小游戲(vivogame)、QQ小游戲(qqgame)。

各平臺不同版本的發布命令為:

<pre class="" style="margin: 0px 0px 16px; padding: 10px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word; overflow: auto; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 12px; line-height: 1.6; font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; word-break: break-all; background: rgb(246, 246, 246); border-width: 1px; border-style: solid; border-color: rgb(221, 221, 221); border-radius: 3px; white-space: pre-wrap; text-align: left;">

  1. //HTML5版本發布命令

  2. layaair2-cmd publish -c web

  3. //微信小游戲版本發布命令

  4. layaair2-cmd publish -c wxgame

  5. //百度小游戲版本發布命令

  6. layaair2-cmd publish -c bdgame

  7. //小米快游戲版本發布命令

  8. layaair2-cmd publish -c xmgame

  9. //OPPO小游戲版本發布命令

  10. layaair2-cmd publish -c oppogame

  11. //vivo小游戲版本發布命令

  12. layaair2-cmd publish -c vivogame

  13. //QQ小游戲版本發布命令

  14. layaair2-cmd publish -c qqgame

</pre>

未來有新的平臺命令,可以通過官網文檔中查看,文檔鏈接為:

https://ldc2.layabox.com/doc/?nav=zh-ts-3-0-6

使用命令行發布的注意事項

使用命令行發布之前,我們一定要先在LayaAirIDE里發布一次,因為命令行發布功能需要依托于.laya目錄下的各個平臺的js發布腳本和平臺json配置信息。比如排除,發布配置等信息,需要發布一次后,才會更新保存到對應的平臺json配置中。如果對平臺發布功能不熟悉的,可以打開之前提供的官網文檔鏈接。

需要注意的是,layaAirIDE 2.4beta版創建的項目,TS與TS實驗版的編譯配置有個BUG,所以會導致layaair2-cmd運行報錯。layabox社區上給出了已修復的編譯庫,大家可以前往下載替換,或者等待layaAirIDE 2.4正式版。

2.4beta編譯庫的layabox社區下載地址為:

http://ask.layabox.com/article/8

4.3 不切IDE的工作流

學到此處,我們不僅可以在VSCode中用F5斷點調試,也可以通過本小節學習到的命令行方式,直接通過VSCode終端,使用layaair2-cmd來編譯和發布項目。

這樣一來,對于日常的編碼、編譯、調試、發布,直接在VSCode中實現,不用在兩個工具之間來回切換了。

五、配置VSCode的編譯快捷鍵

盡管命令行模式的工作流可以在日常編碼中脫離了來回切換IDE的繁瑣,或許有一些開發者仍會覺得易用性不夠,如何能實現LayaAirIDE那樣,直接F8快捷鍵就編譯,請繼續看本小節的指引。

直接給命令行設置快捷鍵是通過VSCode做不到的。但是,我們可以在任務里去執行命令行的相關指令。然后修改執行任務的快捷鍵,并指定默認運行的任務名稱,就可以實現VSCode快捷鍵的綁定。

5.1 新建任務(task)

如果我們還沒有創建過任務,可以在VSCode的終端菜單里,點擊配置任務,如下圖所示。

image

然后,點擊選擇 使用模板創建tasks.json文件 的選項,如下圖所示。

image

之后再點擊選擇運行任意外部命令的示例選項,如下圖所示。

image

這時,我們就可以看到,.vscode目錄下,一個執行外部命令的任務模板.vscode/task.json創建成功了,我們只需要更改一下label(任務名稱)和command(要執行的命令)即可。效果如下圖所示。

image

修改后的task.json內容為:

<pre class="" style="margin: 0px 0px 16px; padding: 10px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word; overflow: auto; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 12px; line-height: 1.6; font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; word-break: break-all; background: rgb(246, 246, 246); border-width: 1px; border-style: solid; border-color: rgb(221, 221, 221); border-radius: 3px; white-space: pre-wrap; text-align: left;">

  1. {

  2. "version":"2.0.0",

  3. "tasks":[

  4. {

  5. "label":"compile",

  6. "type":"shell",

  7. "command":"layaair2-cmd compile"

  8. }

  9. ]

  10. }

</pre>

5.2 綁定快捷鍵

文件菜單 -> 首選項 -> 打開 鍵盤快捷方式,或者直接先后連按快捷鍵Ctrl+K Ctrl+S 打開,如下圖所示。

image

打開鍵盤快捷方式后,先在頂部搜索task,找出任務相關的快捷方式,再找到 運行任務(Run Task)雙擊,設置快捷鍵 Ctrl + F8 (可按自己的習慣設置一個不沖突的快捷鍵即可),回車即完成運行任務的快捷鍵綁定。效果如下圖所示。

image

然后,通過快捷鍵Ctrl + Shift +P調出命令面板,搜關鍵字 open key,找到 打開鍵盤快捷方式(JSON)的命令,如下圖所示,點擊打開。

image

點擊后,我們看到快捷盤配置的JSON里,有剛剛綁定了快捷鍵的配置信息。這里,我們增加一個參數args,此處的值就是默認啟動的任務,我們將之前創建的任務名稱compile設置到這里即可,效果如下圖所示。

image

有經驗的開發者,其實也可以跳過之前的步驟,不需要先在鍵盤快捷方式面板那里綁定,而是直接在keybindings.json中增加以下內容:

<pre class="" style="margin: 0px 0px 16px; padding: 10px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word; overflow: auto; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 12px; line-height: 1.6; font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; word-break: break-all; background: rgb(246, 246, 246); border-width: 1px; border-style: solid; border-color: rgb(221, 221, 221); border-radius: 3px; white-space: pre-wrap; text-align: left;">

  1. [

  2. {

  3. "key":"ctrl+f8",

  4. "command":"workbench.action.tasks.runTask",

  5. "args":"compile"

  6. }

  7. ]

</pre>

到這里,我們就完成了給編譯命令綁定快捷方式的全部操作。以后,我們就可以在VSCode中直接使用Ctrl+F8編譯,F5斷點運行,這個快捷的編碼工作流了。

六、用gulp監聽實現自動執行編譯

如果開發者覺得快捷鍵編譯還不夠,想實現實時編譯,也是可以做到的。這一小節,我們以創建gulp任務的方式,為大家介紹如何實現自動編譯。

6.1 安裝本地gulp環境

之前,我們以npm i gulp -g 命令安裝過gulp全局環境。

如果要使用gulp監聽等功能,還需要在項目的目錄內安裝本地gulp環境,

安裝命令去掉全局參數-g即可,去掉后的命令為: npm i gulp,安裝效果如下圖所示。

image

安裝完成后,我們可以看到項目目錄內多了一個node_modules目錄,如下圖所示。

image

6.2 編寫gulp任務腳本

我們在根目錄創建一個gulpfile.js腳本文件,腳本內容參照如下:

<pre class="" style="margin: 0px 0px 16px; padding: 10px; max-width: 100%; box-sizing: border-box; overflow-wrap: break-word; overflow: auto; font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 12px; line-height: 1.6; font-family: "YaHei Consolas Hybrid", Consolas, "Meiryo UI", "Malgun Gothic", "Segoe UI", "Trebuchet MS", Helvetica, monospace, monospace; word-break: break-all; background: rgb(246, 246, 246); border-width: 1px; border-style: solid; border-color: rgb(221, 221, 221); border-radius: 3px; white-space: pre-wrap; text-align: left;">

  1. const {watch ,task }= require("gulp");

  2. const {exec}= require("child_process");

  3. function compile(cb){

  4. //執行編譯命令 layaair2-cmd compile

  5. let process = exec("layaair2-cmd compile");

  6. process.stdout.on("data",(data)=>{

  7. console.log(data);

  8. });

  9. process.stderr.on("data",(data)=>{

  10. console.log(data);

  11. });

  12. process.on("exit",(code,signal)=>{

  13. console.log("success");

  14. console.log(code,signal);

  15. cb();

  16. })

  17. }

  18. //創建一個名稱為compile的gulp任務

  19. task("compile", function(){

  20. /**

  21. *@監聽src目錄下的所有子目錄的所有文件,

  22. *@延遲1000毫秒,才執行下次監聽

  23. *@監聽生效后執行的函數

  24. */

  25. watch('src/**/*.*',{delay:1000}, compile);

  26. });

</pre>

了解更多gulp任務監聽,可以查閱gulp官方文檔:

https://www.gulpjs.com.cn/docs/getting-started/watching-files/

保存好gulpfile.js這個gulp任務腳本后,效果如下圖所示。

image

然后,我們直接在終端命令行下,直接輸入gulp compile即可執行名稱為compile的gulp任務。如下圖所示。

image

只要這個任務不關,那這個任務的watch監聽會一直執行下去,從而達到了自動編譯的目標。

七、寫在最后

至此,在VSCode中編碼時,無論是編譯、調試運行、還是發布,本篇都有涉及,以此為借鑒,開發者可以搭建一個流暢的開發工作流。

當然,VSCode自定義工作流的強大遠不止于此,對于工作流的搭建,方式非常多。如果想更加深入了解的,可以不必局限于本篇。本篇僅僅為那些沒有VSCode使用經驗的開發者,提供一些基礎的工作流搭建參照。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370