使用共享的 package
借用和分享程式碼。
本文的重點是什麼?
-
Pub.dev 網站是 Dart package 主要的公共儲存庫。
-
遵循一些規定,比如一個有效的 pubspec.yaml 檔案,使你的應用成為一個 package。
-
如果你正在開發一款 Web 或伺服器端應用,請使用
dart create
產生相關初始化檔案。 -
如果你正在開發一款 Web 或伺服器端應用,請使用
dart pub get
命令下載相關的 package。 -
如果你正在開發一款移動應用,請使用 Flutter 工具。
當你可以建立和執行 Dart 應用時,你就已經準備複用其他程式設計師編寫的程式碼了。 pub.dev 網站 儲存庫有許多可用的使用 Dart 程式碼編寫的 package。
本課程將向你展示如何使用 dart pub
命令
—Dart 的 package 管理命令—即用以安裝儲存庫中某個 package
(比如 vector_math package)的命令。你可以使用這些步驟來安裝由 pub.dev 網站 提供的任意一個 package;當你想安裝其它你想要使用的 package 時只需修改這些步驟中的範例的 package 名稱即可。本課程同時也會向你展示一些你可能會使用到的優秀的 package。
關於 pubspec.yaml 檔案
想要使用外部的 package,你的應用其本身也必須是一個 package。任何在最上層目錄中包含有效 pubspec.yaml 檔案的應用都是一個 package,從而可以使該應用使用外部的 package。
你可以使用 dart create
命令來產生帶有有效 pubspec.yaml 檔案和目錄結構的 package。你可以使用命令列工具來呼叫 Stagehand 工具,也可以使用類似 IntelliJ 或 WebStorm 這樣的 IDE 來間接使用 Stagehand 工具。
現在你可以執行 dart create
命令,使用
--help
來檢視它可以產生的範本檔案:
$ dart create --help
你將會看到一系列的產生器,包括各種 Web 和伺服器端應用的。其中一個產生器叫 console-full。
使用 dart create
工具來產生一個叫做 vector_victor
的命令列應用:
$ dart create -t console vector_victor
$ cd vector_victor
pubspec.yaml 檔案包含了由 YAML 語言撰寫的 package 規格。(存取 Pubspec 格式 獲取更多深入的介紹。)而你的 pubspec.yaml 檔案看起來則應該是這樣的
name: vector_victor
description: A sample command-line application.
version: 1.0.0
# homepage: https://www.example.com
environment:
sdk: ^3.0.0
# dependencies:
# path: ^1.8.0
dev_dependencies:
lints: ^2.1.0
test: ^1.24.2
依賴 package 的命名
為了能夠使用 package,你需要將其新增到你應用 pubspec.yaml 檔案的依賴裡。依賴中的每一項都指定了你應用所使用的 package 名稱以及版本。
下面讓我們為 vector_victor 應用新增一個名為 vector_math 的 package,這個 package 可以在 pub.dev 網站 中找到。
執行 dart pub add
命令並指定使用 vector_math
,將其加入你的依賴中。
$ dart pub add vector_math
Resolving dependencies...
+ vector_math 2.1.4
Downloading vector_math 2.1.4...
Changed 1 dependency!
這個命令將會將 vector_math
加入你工程檔案中
pubspec.yaml
的 dependencies
部分:
dependencies:
vector_math: ^2.1.4
You can also find your desired version on the
vector_math
page on pub.dev
and add it manually to the dependency section.
你可以查閱 Pub 版本管理 獲取更多有關版本號含義以及格式化的相關資訊。
pub.dev 網站 是 Dart package 主要的公共儲存庫。
dart pub
命令在解析 package 依賴時會自動去該網站進行檢查。如果你想使用該網站的某個 package,你可以像我們上面所說的那樣在 dependencies 中指定對應的 package 名稱。
安裝依賴的 package
如果你使用適配了 Dart 語言開發的編輯器或者
dart pub
命令了編輯 pubspec.yaml
檔案,其可能會在你編輯了該檔案後自動下載安裝相關依賴的 package。
否則,你只能手動地執行 dart pub get 命令進行下載安裝:
$ dart pub get
Resolving dependencies...
+ vector_math 2.1.4
Changed 1 dependency!
dart pub get
命令會安裝你應用依賴列表中的 package。而每一個 package 可能還會包含其它的函式庫或資源,Pub 同樣會將它們依次安裝;如果一個依賴的 package 已經安裝過,則會直接使用。
Pub 會快取你應用依賴過的每一個 package 並將其快取至
.dart_tool/package_config.json
的檔案中。
Pub 會建立一個名為 pubspec.lock
的檔案來標識哪些 package 的哪些版本已經安裝過。此舉可以為開發者提供一個穩定的開發環境。你也可以修改 package 的版本並使用 dart pub upgrade
命令來更新 package。
你可以從中獲取(或不可獲取)什麼?
除了 Dart 庫以外,vector_math
package
可能包含其它對你有用但不會安裝到你應用目錄的資源。讓我們後退一步看看你在獲取依賴時得到了什麼以及它們從何而來。
存取 Github 儲存庫
Dart 數學向量儲存庫
來檢視 vector_math
package 的具體內容。儘管該儲存庫中有大量的檔案和目錄,但是隻有 lib
目錄下的檔案會在你執行 pub get 命令時安裝。
README.md
file is a good place to start.
It should contain important information about the package,
such as its intent, contents, samples, and instructions.
The LICENSE
file provides
copyright and rules-of-use information.
All of these files are in the package repository;
the contents of some,
such as README.md
,
are also displayed in pub.dev.
These files aren't installed when you install a package.
當使用別人開發的 package 時,README 檔案是瞭解這個 package 的最好地方。它會包含與這個 package 相關的重要資訊,比如開發 package 時的想法、其相關內容、範例以及使用說明。
LICENSE 檔案則包含了版權資訊以及使用規則資訊。所有檔案均在 package 的程式碼儲存庫中,且在你安裝 package 時它們不會被下載。而 README.md
中的內容同樣也會展示在 pub.dev 網站上。
從 package 中匯入庫
現在你已經安裝了 package,你可以在你的應用中匯入和使用 package 中的函式庫。
與 SDK 庫一樣,使用 import
關鍵字匯入使用安裝了的函式庫中的程式碼。
Dart SDK 函式庫是內建的且由特殊的 dart:
字首標識。如果你使用由 pub 命令安裝的外部庫,請使用 package:
字首。
-
獲取 package 中主要庫的匯入流程:
-
點選 Installing 標籤。
-
複製有 import 的這一行程式碼。其看起來像下面這樣:
import 'package:vector_math/vector_math.dart';
-
在你的 vector_victor 應用中,編輯
lib/vector_victor.dart
檔案,由此它匯入 vector_math 庫並使用了它的一些 API。你可以閱讀 vector_math API 文件 獲取更多相關資訊。
其它資源
-
Dart 開發者們在 pub.dev site 分享它們開發的 package。你可以在那裡查詢你想要使用的 package 或者分享你自己開發的 package。
-
你也可以查閱 pub package 文件 獲取更多有關如何使用和分享 package 的資訊。