dart系列之:建立Library package

flydean發表於2021-11-20

簡介

在dart系統中,有pubspec.yaml檔案的應用就可以被成為一個package。而Libray package是一類特殊的package,這種包可以被其他的專案所依賴. 也就是通常所說的庫。

如果你也想你寫的dart程式可以上傳到pub.dev上,或者提供給別人使用,則來看看這篇文章吧。

Library package的結構

先看下library package的結構:

app3
├── lib
│   └── main.dart
└── pubspce.yaml

這是一個最簡單的Library package的結構,在root目錄下面,我們有一個pubspce.yaml檔案。然後還有一個lib目錄存放的是library的程式碼。

一般來說lib下面的庫是可以供外部進行引用的。如果是library內部的檔案,則可以放到lib/src目錄下面,這裡面的檔案表示是private的,是不應該被別的程式引入的。

如果想要將src中的包匯出供外部使用,則可以在lib下面的dart檔案中使用export,將需要用到的lib匯出。這樣其他使用者只需要import這個一個檔案即可。

export的例子如下:

library animation;

export 'src/animation/animation.dart';
export 'src/animation/animation_controller.dart';
export 'src/animation/animations.dart';
export 'src/animation/curves.dart';
export 'src/animation/listener_helpers.dart';
export 'src/animation/tween.dart';
export 'src/animation/tween_sequence.dart';

上面的程式碼是flutter的animation庫。

匯入library

怎麼使用呢?我們可以使用import語句來匯入對應的lib:

import 'package:flutter/animation.dart';

如果是內部檔案的匯入,則可以使用相對路徑。只有在匯入外部package的時候才需要加上package:字首。

條件匯入和匯出library

因為dart是設計在可以在不同的平臺上進行工作,所以一個library在不同的平臺可能需要匯入或者匯出不同的library檔案, 這就叫做條件匯入和匯出。

比如可以通過判斷dart庫是io庫還是html庫來選擇匯出不同的檔案:

export 'src/hw_none.dart' // Stub implementation
    if (dart.library.io) 'src/hw_io.dart' // dart:io implementation
    if (dart.library.html) 'src/hw_html.dart'; // dart:html implementation

上面的意思是,如果在app中能夠使用dart:io,那麼就匯出src/hw_io.dart.

如果能夠使用dart:html,那麼就匯出src/hw_html.dart,否則就匯出src/hw_none.dart。

如果是條件匯入的話,將export改成import即可。

新增其他有效的檔案

因為不同的library有不同的作用,所以通常需要新增一些額外的檔案來保證library的有效性和完整性。

為了保證library的有效性,需要新增測試程式碼,測試程式碼通常放在test目錄中。

如果是建立命令列工具,則需要將對應的工具放到tools目錄中。

另外還有 README.md 和 CHANGELOG.md等檔案。

library的文件

dart文件可以使用 dartdoc這個工具來生成。dart中的文件格式是以///開頭的,如下:

/// The event handler responsible for updating the badge in the UI.
void updateBadge() {
  ...
}

釋出到pub.dev

一個最好共享library的方式就是將其傳送到pub.dev上。具體的命令是:pub publish。

總結

以上就是dart中建立library的全部內容。

本文已收錄於 http://www.flydean.com/11-dart-create-package/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章