pub

pub是Dart的包管理器。什么是包管理器?就是可以让你使用别人分享的高质量的代码,同时你也可以分享自己的代码让别人用的一个工具;大家相互分享和贡献自己的代码,才能逐渐壮大Dart的生态。

pub不需要安装,在你安装Dart SDK的时候就一同安装了。pub提供了一个官方网站:pub官网,在官网上我们可以浏览和搜索目前可用的三方类库,目前上面已经有很多优秀的三方库,可以直接使用,无需重复造轮子。

本质上pub是通过一个pubspec.yaml文件来工作,里面记录了我们要用的类库,当前Dart SDK的版本,以及开发环境和生成环境的区别;pub还提供了一系列命令行工具,比如下载三方库。

生成pubspec.yaml

pubspec.yaml文件有一定的格式要求,手写容易出错,我们可以利用stagehand工具来生成这个文件,stagehand工具是用来生成Dart项目的文件结构的。

第一步,先安装或更新stagehand,在当前项目根目录执行下面的命令:

#global表示全局安装,无论你在哪个目录都可以安装
pub global activate stagehand

一般第一次执行都会遇到下面的提示:

意思是说你还没有将Dart三方库存放地址添加到环境变量,红框中的路径就是下载三方库所存放的路径。你需要将这个路径添加到自己的环境变量中即可,然后再重启命令行才能生效,如果你使用的是IDEA的Terminal,那需要重启IDEA才行。

第二步,执行stagehand命令,会输出它能提供的所有的pubspec.yaml文件模板:

stagehand

在我的环境中,它输出了如下结果:

Available generators:
  console-full   - A command-line application sample.
  package-simple - A starting point for Dart libraries or applications.
  server-shelf   - A web server built using the shelf package.
  web-angular    - A web app with material design components.
  web-simple     - A web app that uses only core Dart libraries.
  web-stagexl    - A starting point for 2D animation and games.

第三步,使用console-full模板来生成pubspec.yaml,执行下面命令:

stagehand console-full

此时项目根目录会生成binlibtest目录,pubspec.yaml文件以及其他文件。pubspec.yaml文件的内容大概是这样:

name: DartDemo
description: A sample command-line application.

environment:
  sdk: '>=2.1.0 <3.0.0'

#dependencies:
#  path: ^1.4.1

dev_dependencies:
  pedantic: ^1.0.0
  test: ^1.0.0

pub仓库源

由于pub的仓库源是搭建在国外,访问速度非常慢,我们需要配置国内仓库源,这里使用的是清华大学的开源仓库源。

给系统添加PUB_HOSTED_URL环境变量,值为https://mirrors.tuna.tsinghua.edu.cn/dart-pub/即可,以后当我们使用pub get命令来下载三方库时速度会得到很大提升。

pubspec.yaml讲解

生成的pubspec.yaml文件默认声明了2个依赖库:pedantictest。使用pub get命令来下载这些库:

pub get

下载完毕,代码中就可以使用这些库了。

dependencies区域是声明要依赖的三方库,当我们将自己的代码分享到pub上供别人使用时,这些依赖库的代码会一起上传。

dev_dependencies是开发环境的依赖声明,只是在开发阶段使用,当分享自己代码时,依赖库代码并不会一起上传。

假设我们要使用一个新的三方库,打开pub官网找到http这个库,将它和版本号添加到dependencies块中:

dependencies:
  http: 0.12.0+2

执行pub get来载,然后在代码中就可以使用了:

import 'package:http/http.dart' as http;

main() async {
  var html = await http.get("https://lixiaojun.xin");
  print(html.body); //输出html内容
}
更新时间: 6/1/2019, 11:25:37 AM