2.5、Dart语言基础:库与包

学习笔记,旨在于快速入门和学习Dart,其中可能会有理解错误,请指出,一起学习。

系列文章

2.1、Dart语言基础:变量、运算符
2.2、Dart语言基础:函数与闭包
2.3、Dart语言基础:面向对象
2.4、Dart语言基础:异步
2.5、Dart语言基础:库与包
...

一、库基础

  • 关键字libraryimport:
    The import and library directives can help you create a modular and shareable code base.

  • 标记为内部私有:下划线underscore (_)

  • 库可以被打包,然后发布。
    packages

1、库的引用:package: scheme

// Importing core libraries。
import 'dart:math';

// Importing libraries from external packages
import 'package:test/test.dart';


// Importing files
import 'path/to/my_other_file.dart';

2、引入的时候,创建库的prefix,关键字as

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;

// Uses Element from lib1.
Element element1 = Element();

// Uses Element from lib2.
lib2.Element element2 = lib2.Element();

3、限制性导入(即导入库中的一部分),关键字show/hide

// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

4、延迟加载(Lazily loading a library),一般用于web端,关键字deferred as

import 'package:greetings/hello.dart' deferred as hello;

// 可以异步使用
Future<void> greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}
  • 异步、多次使用库方法,库文件只会被加载一次。

  • Here are some cases when you might use deferred loading:
    1、To reduce a web app’s initial startup time.
    2、To perform A/B testing—trying out alternative implementations of an algorithm, for example.
    3、To load rarely used functionality, such as optional screens and dialogs.

  • Keep in mind the following when you use deferred loading:
    1、A deferred library’s constants aren’t constants in the importing file. Remember, these constants don’t exist until the deferred library is loaded.
    2、You can’t use types from a deferred library in the importing file. Instead, consider moving interface types to a library imported by both the deferred library and the importing file.
    3、Dart implicitly inserts loadLibrary() into the namespace that you define using deferred as namespace. The loadLibrary() function returns a Future.

二、库的实现(Implementing libraries)

Creating packages

1、库必要结构

image.png
  • 配置文件:pubspec.yaml
  • 库目录:lib
    lib目录下的文件,默认是对外公开的。
    实践中,一般将源码放在lib/src,src下文件私有;对外文件,需要使用export额外导出。
例子:shelf的包结构
image.png

其中,对外的文件有shelf_io.dart 和 shelf.dart 两个文件。

export 'src/cascade.dart' show Cascade;
...
export 'src/middleware/add_chunked_encoding.dart' show addChunkedEncoding;
...

2、条件导入和导出,Conditionally importing and exporting library files

// lib/hw_mp.dart
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

上面代码的意思:
1、当import 'dart:io';时,导出文件src/hw_io.dart
2、当import 'dart:html';时,导出文件src/hw_html.dart
3、其他,导出文件src/hw_none.dart

3、包的文档化

使用工具dartdoc,前提是代码使用 '///' 进行注释。

三、包,packages

How to use packages

  • 包管理遵循pub package manager

  • 包存储:
    公网 pub.dev site、本地、私有服务器。

  • 包管理工具
    1、命令行工具dart pub
    2、IDE支持插件

包的创建

包的获取,Getting packages

  • 获取包命令:dart pub get
    dart pub get

  • 包引用配置package_config.json:支持配置包的不同的url地址

从包里面引用库,Importing libraries from packages

import 'package:js/js.dart' as js;
import 'package:intl/intl.dart';
  • transmogrify
transmogrify/
  lib/
    transmogrify.dart
    parser.dart
  test/
    parser/
      parser_test.dart
import 'package:transmogrify/parser.dart';

更新包依赖,Upgrading a dependency

参考

Developing packages & plugins

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容