在构建时进行断言的微库。

pub package
Build Status
Coverage

使用const(构建时)值配置Dart应用程序是一种常见做法。这种方法有很多好处,例如可以摇树(tree shaking)未使用过的代码。

此库可以轻松地对这些常量进行构建时断言,从而使配置错误的应用程序在构建时而不是运行时失败。

用法

使用此库在构建时验证应用程序的const值。任何内容都可以用@Assert进行注释。

//
// This app will fail compilation with '--define=MY_VAL=foo'
//

@Assert(
  myBuildTimeVal == 'val1' || myBuildTimeVal == 'val2',
  'myBuildTimeVal must be one of "val1" or "val2"',
)
const myBuildTimeVal = String.fromEnvironment('MY_VAL');

void main() {
  print('myBuildTimeVal is "$myBuildTimeVal"');
}

常见问题

?这到底是怎么回事?!

Dart编译器在编译时调用注解构造函数。这个微库利用这一点来“欺骗”编译器,允许构建时断言(几乎)可以放置在任何地方。特别感谢Kyle Turney对这种方法的启发。

为什么不允许没有消息的断言?

不幸的是,Dart不将消息为空的断言与根本没有消息的断言视为相同。这意味着我们需要为@Assert提供两个构造函数,以启用无消息断言和有消息断言。相反,我们在创建这个微库时做出了设计选择,即@Assert应该需要一个非空消息。这可以强制执行更有意义的编译失败消息。

将来是否还需要这个?

我们预计,当Dart支持元编程时,这个库将被弃用。

GitHub

查看 Github