1. 程式人生 > >【轉】Egret第三方庫的用法和製作

【轉】Egret第三方庫的用法和製作

轉自:https://www.jianshu.com/p/c3cb7548a4a3

 

Egret官方庫按照模組呈現,這樣設計的目的是避免載入不需要的模組,減少最終程式碼的體積,提高載入速度。
目前 Egret 的官方庫分為8個模組

  1. egret 必備的核心庫
  2. game 製作遊戲會用到的類庫,比如 MovieClip,URLLoader 等
  3. res 資源載入庫,所有涉及資源載入的工作,都可以通過這個模組來完成
  4. tween 動畫緩動類
  5. dragonbones 龍骨動畫庫,用來製作一些複雜的動畫效果
  6. socket 用來通訊的 WebSocket 庫
  7. gui 老版本的 UI 庫
  8. eui 新增的 UI 庫,使用起來更加的方便

您需要用哪個庫,就配置哪個。比如我想用 game tween eui這3個模組,只要像下面這樣新增到配置檔案裡就可以了

image

然後命令列裡使用 egret build -e命令,引擎會自動把使用到的類庫放到你的專案裡。
你會發現,在專案的 libs/modules 資料夾下,原來只有一個 egret 資料夾,現在多了game eui 和tween三個資料夾,這些就是使用到的類庫。
同樣的,如果您在 egretProperties.json 配置檔案裡把模組名刪掉,libs/modules 資料夾下也會刪掉對應的類庫。

使用egret create project_name命令建立的專案,預設會帶4個官方模組:egret game res tween

準備第三方庫

第三方庫可以是標準的 ts 庫,也可是你在網上下載現成的 js 庫,或者是自己寫的 js 庫。

由於 js 與 ts 在語法結構上的差異,在 ts 中不能直接呼叫 js 庫的 API,所以TypeScript 團隊提供了一套虛構宣告語法,可以把現有程式碼的 API 用標頭檔案的形式描述出來,副檔名為 d.ts(d.ts 命名會提醒編譯器這種檔案不需要編譯)。這套虛構定義語法,讓你不需要去實現函式體裡的程式碼,類似定義interface和抽象類。

幸運的是目前,大多數流行的 js 類庫已經由官方提供,或者由熱心的社群開發者提供了對應的 d.ts 檔案。當然,如果沒有,您也可以自己編寫。這裡有篇教程講得很詳細,裡邊也包含一個龐大的 d.ts 庫,以及管理這些庫的方法:使用JS類庫

另外,由於一些流行的 js 庫在快速更新,可能會有你找到的 d.ts 檔案定義與 js 庫的版本不一致而導致其中的 API 並沒有完全對應的問題。遇到這種情況,要麼尋找對應版本的 js 庫,要麼就需要您自己修改一下 d.ts 檔案了。

至於具體修改方法,在對照原 d.ts 的基礎上,你可能還需要熟悉 ts 介面方面的語法,可以參考這裡:ts介面教程

建立第三方模組

當我們準備好了要用的第三方庫,還需要把它編譯成 egret 需要的模組結構。
比如現在有一個名為 jszip 的 js 庫,它包含3個檔案

  1. FileSaver.js
  2. jszip.d.ts
  3. jszip.min.js

第 1 步 要建立一個egret第三方庫的專案檔案,在命令列中輸入
egret create_lib jszip

第三方庫專案與 Egret 專案不能巢狀。請不要在Egret 專案目錄下面建立第三方庫專案。

您會發現剛剛建立的第三方庫專案和我們平時看到的 Egret 專案結構是不同的,裡面包含2(!可能是3個吧! 我自己新建的卻一個都沒有)個空資料夾 bin、src、libs(如果沒有請自行加上),還有一個 package.json 的配置檔案。
第 2 步 把準備好的那3個檔案拷貝到src資料夾中。

第 3 步 如果需要引用到其他的第三方庫的程式碼,請把引用到的庫檔案(主要是 .d.ts 檔案)放到 libs 目錄下,libs 下不要放其他除了 .d.ts 外的其他 .ts 檔案。

第 4 步 開啟 package.json,將3個檔案寫入到 files 下面,如果檔案有先後依賴順序,一定得注意順序。

image

第 5 步 在命令列中輸入編譯命令
egret build jscs

由於我的是3個空檔案顯示編譯報錯

編譯完成後,您會發現,在 bin 資料夾下,生成了一個 jszip 資料夾,裡面有個3個檔案

  • jszip.d.ts 描述檔案
  • jszip.js 在 Egret 專案裡,debug 模式時使用的 js 庫
  • jszip.min.js 在 Egret 專案裡,釋出後的正式版使用的 js 庫,經過壓縮,體積比 jszip.js 小

使用第三方模組

和使用官方的擴充套件模組方法類似,在modules裡填寫相關的資訊

image

  1. "name": "jszip" 第三方庫的名稱
  2. "path": "C:/Users/Administrator/Desktop/jszip" 剛才我們建立的第三方庫的路徑,絕對路徑或者相對路徑

這裡需要注意的是,jszip 需要放置在 Egret 專案目錄的外面。

最後命令列裡使用 egret build -e 命令,引擎會把自定義的第三方庫引用進來,在 libs/modules 路徑下,你會看到 jszip 這個庫,並且在 index.html 中的 modules_files 塊中,會加入 jszip 的 script 標籤。

image

image

所有需要對 api 的 .d.ts 檔案,請放在 src 下面,即需要在 package.json 裡配置,其他的請放在 libs 下面。

其他第三方庫

除了使用 egret 提供的標準的第三方庫的方式,我們還提供了另外一種可以通過 index.html 來直接配置的方式。

程式碼請放在 libs 目錄下面,但是不要放在 libs/modules 下面。

image

  • 在 index.html 中的 other_libs_files 塊中,配置自定義的第三方庫。需要填寫 egret=”lib” 以及 src-release。

image

所有放在 libs 目錄下面的檔案,以 ts 作為副檔名的檔案只能是 .d.ts(如 a.d.ts)檔案,不能有純 ts 檔案(如 a.ts)。



作者:彬少灬
連結:https://www.jianshu.com/p/c3cb7548a4a3
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。