Dart能否基于外部包的存在实现条件导出?语法是什么?
基于外部包存在实现Dart包的条件导出
可以实现,但Dart并没有提供if (dart.package.<pkg_name>)这类直接检测外部包是否存在的语法,需要结合可选依赖和环境变量来间接完成编译时的条件导出,具体操作如下:
第一步,在你的包的
pubspec.yaml中将目标外部包声明为可选依赖:dependencies: foo: version: ^1.0.0 optional: true第二步,在同一份
pubspec.yaml里定义一个环境变量,用来标记是否启用该外部包的集成:environment: sdk: '>=2.12.0 <3.0.0' enable_foo_integration: 'false'第三步,在你的库入口文件中,使用条件导出语法,根据环境变量的值导出不同的实现文件:
// lib/my_package.dart export 'default_impl.dart' if (environment:enable_foo_integration) 'foo_support.dart';
当用户使用你的包且需要启用与foo包的集成时,只需在他们自己项目的pubspec.yaml中修改对应的环境变量:
environment: enable_foo_integration: 'true'
如果只是需要运行时判断外部包是否存在,可以直接尝试导入该包并通过try/catch或者类型检查来处理,但这不属于编译时的条件导出范畴。
内容的提问来源于stack exchange,提问作者ExactaBox
相关产品推荐
相关产品推荐

