Envify 开源项目教程
项目介绍
Envify 是一个用于处理环境变量的 Dart 包。它通过代码生成的方式,帮助开发者从 .env
文件中加载环境变量,并生成对应的 Dart 类,使得环境变量的使用更加安全和方便。需要注意的是,Envify 已经被弃用,推荐使用其替代品 Envied。
项目快速启动
安装依赖
首先,在 pubspec.yaml
文件中添加 envify
和 envify_generator
作为依赖:
dependencies:
envify: any
dev_dependencies:
envify_generator: any
build_runner: any
创建 .env
文件
在项目根目录下创建一个 .env
文件,并添加环境变量:
KEY=VALUE
定义环境变量类
在 lib/env/env.dart
文件中定义一个环境变量类:
import 'package:envify/envify.dart';
part 'env.g.dart';
@Envify()
abstract class Env {
static const key = _Env.key;
}
生成代码
运行代码生成器生成对应的 Dart 类:
dart pub run build_runner build
使用环境变量
生成的代码中会包含一个 _Env
类,你可以通过 Env
类来访问环境变量:
void main() {
print(Env.key); // 输出 "VALUE"
}
应用案例和最佳实践
案例一:多环境配置
在不同的环境中使用不同的 .env
文件,例如 env.development
和 env.production
:
@Envify(path: 'env.development')
abstract class DevEnv {
static const key = _DevEnv.key;
}
@Envify(path: 'env.production')
abstract class ProdEnv {
static const key = _ProdEnv.key;
}
案例二:安全加载环境变量
通过代码生成的方式,环境变量的值在编译时被嵌入到生成的代码中,这使得环境变量的值在运行时无法被修改,提高了安全性。
典型生态项目
Envify 可以与其他需要常量值配置的工具(如 json_serializable
和 retrofit
)一起使用,通过代码生成的方式解决这些工具对常量值的需求。
与 json_serializable
结合使用
在 pubspec.yaml
中添加 json_serializable
依赖:
dependencies:
json_annotation: any
dev_dependencies:
build_runner: any
json_serializable: any
定义一个 json_serializable
类:
import 'package:json_annotation/json_annotation.dart';
part 'example.g.dart';
@JsonSerializable()
class Example {
final String key;
Example({required this.key});
factory Example.fromJson(Map<String, dynamic> json) => _$ExampleFromJson(json);
Map<String, dynamic> toJson() => _$ExampleToJson(this);
}
生成代码:
dart pub run build_runner build
与 retrofit
结合使用
在 pubspec.yaml
中添加 retrofit
依赖:
dependencies:
retrofit: any
dio: any
dev_dependencies:
build_runner: any
retrofit_generator: any
定义一个 retrofit
API 接口:
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'api.g.dart';
@RestApi(baseUrl: "https://example.com")
abstract class ApiClient {
factory ApiClient(Dio dio, {String baseUrl}) = _ApiClient;
@GET("/data")
Future<String> getData();
}
生成代码:
dart pub run build_runner build
通过