Dart SDK 裡面包了一個稱為 pub 的套件管理工具程式,說明網頁的標題是 Pub Package and Asset Manager。
一個含有 pubspec.yaml 設定檔的資料夾就是一個 Dart 的 package,裡面原則上有個 lib/ 資料夾,詳情可以參考: Create Library Packages。
在 pubspec 裡面,主要是設定名稱、相依套件 (dependency)、轉換器 (transformer)。
相依套件可以設定名稱,也可以設定成由 git 取得: Pub Dependencies。
如果要自建套件發佈站: https://github.com/dart-lang/pub-dartlang-dart。
開發時期才需要的套件,比如單元測試用的套件,可以列在 dev_dependencies
中。這主要是針對作為函式庫的套件,這樣僅僅使用到函式庫的話,就不用連測試用的套件也得安裝。
設定相依性的時候,版本規則比較特殊的是 Caret Syntax。意思是依照 semantic versioning 取相容的版本,舉例來說: ^5.2.3
會等同於 >=5.2.3 <6.0.0
。關於相依性解析時,版本編號的解釋,可以參考: Pub Versioning Philosophy。
整個建置的部份在各個平台間的整合與一致化似乎還不是很完整,目前 pub 指令的說明,包含 Pub Package and Asset Manager 與 Pub Commands 裡面是說 pub build 跟 pub serve 是專門針對 web 開發的:
Two additional commands (pub build and pub serve) are specific to web development.
這兩個子命令的文件也是丟在 Dart for the Web 那邊,但是 pub build 裡面用到的 transformer 又是在 pub 本身的文件裡頭介紹的 XDDD 可能整理的還不是很好,未來可能還會有變化。
一些名詞解釋: Glossary of Pub Terms -
- Lockfile
-
一個檔案名稱為 pubspec.lock 的檔案,裡面會記載所安裝的套件的版本,會透過 pub get, pub upgrade, pub downgrade 等套件管理指令進行更新修改。
- Application package
-
整個套件是作為應用程式使用,使用到的 dependencies 版本通常會是透過 Lockfile 鎖定在特定的版本上,在 pubspec.yaml 裡的版本規則反而是會用很隨意的方式設定,所以會建議 Lockfile 簽入版本控制中。
- Library package
-
套件是作為函式庫使用為主,相依的 dependencies 版本應該儘量指定寬一點。
- Asset
-
基本上就是所有影響到最後要佈署的產出的所有東西,包含原始碼、樣式表、圖檔等等。大概可以粗略的這樣分類:
-
- Source asset: 在儲存媒體上的檔案,會被 pub 讀進去的,也就是原始的檔案。
- Generated asset: 丟給 client 或是寫出到儲存媒體的檔案,會被 pub 輸出,也就是最後的結果產出。
-
從 transformer 的角度來看:
- Input asset: 輸入的內容,可能是剛從 source asset 讀入,或是前一級的 transformer 的輸出。
- Output asset: 輸出的內容,可能會被作為 generated asset 輸出,或是作為下一級 transformer 的輸入。
-
如果要自己寫 Transformer:
- 1-to-1 或 1-to-N 的轉換: Writing a Pub Transformer。
- N-to-1 或 N-to-M 的轉換: Writing an Aggregate Transformer。
實作 Transformer 時所使用的套件是: barback。
基本上要實作 Transformer 就是提供 .apply() (或是 .apply() 如果是實作 AggregateTransformer 的話,參數的型別不太一樣) 方法,要轉換的輸入會由外部用 Transform 物件傳入,轉換後把輸出用 Asset 物件包裝出來加到 Transform 物件中。
專案的資料夾 layout 可以參考: Pub Package Layout Conventions。
不要加入版控的資料夾或檔案,可以參考 What Not to Commit (除了 Dart 的檔案外,裡面還有提到一些 IDE 所產生的檔案):
- .packages: 由 pub 管理的所相依套件檔案。
- doc/api: 在 doc/ 下的 api/ 資料夾是 dartdoc 產生出來的。
- pubspec.lock: 看著辦,建議是 application package 的話要簽入版控。
No comments:
Post a Comment