Dart/Flutter项目中,能否用/lib/foo/src存放foo库内部实现细节?
Dart/Flutter内部实现目录的规范疑问解答
- 先给结论:语法上完全可以用
lib/foo/src存foo模块的内部实现,但非常不推荐,更建议遵循社区通用的顶层lib/src结构。 - 核心逻辑是:Dart pub的包布局约定里,
lib/下的非src内容默认是对外暴露的公共API,任何src目录下的文件都属于内部实现——虽然外部包能强行导入src里的内容,但这是违反规范的用法。 - 正确的模块划分方式应该是:
- 把foo模块的对外公开API放在
lib/foo.dart或者lib/foo/下的公开文件(比如lib/foo/public_api.dart); - 把foo模块的所有内部实现细节,统一放到顶层
lib/src/foo/目录下。
- 把foo模块的对外公开API放在
- 不推荐多
src目录的原因很简单:一是整个项目的内部实现分散在多个地方,其他开发者接手时需要额外适应;二是容易混淆公共API和内部实现的边界,增加误用内部代码的概率。
内容的提问来源于stack exchange,提问作者MLev
相关产品推荐
相关产品推荐

