前几天在整理项目代码时,我遇到了一件让我有点困惑的事。
当时我在写一个比较常见的 barrel 文件,也就是那种专门用来集中 export 其他模块的文件。代码结构很简单,大概是这样:
export'entity.dart';
export'scene.dart';
按我的理解,这个文件的职责只是“对外暴露 API”,并不应该影响当前文件的作用域。
但就在某次重构时,我无意中写下了一句:
import'';
然后,奇怪的事情发生了。
一个不太合理的现象
在这个文件里,我发现:
entity.dart- 居然可以直接使用
- 而我并没有显式写
import 'entity.dart';
第一反应当然是:
是不是哪里理解错了?
因为按照 Dart 一贯的规则:
那 import ''; 到底是在导入什么?
直觉告诉我:这不应该是“正常用法”
冷静下来之后,我开始认真想这件事。
如果这是一个正式支持的语言特性,那至少应该满足几个条件之一:
- 官方文档里能查到
- 语言规范里有定义
- 社区里有人广泛使用
但结果是:
这基本可以排除“隐藏技巧”的可能性。
更可能的解释:一个边缘行为
从行为上看,这更像是:
Dart 分析器在处理库作用域时,暴露出来的一个边缘行为。
换句话说:
import '';- 空字符串并没有被定义为“当前库”
- 只是某些情况下,没有被立即报错
这种情况在很多语言里都存在:
为什么我不会在项目里保留这种写法
哪怕它现在“看起来能用”,我也非常确定一件事:
这行代码不应该出现在任何长期维护的项目中。
原因其实很简单。
1. 可读性几乎为零
import'';
对任何后来接手代码的人来说,都是一种认知负担。
他无法通过语义判断你在干什么,只能靠猜。
2. 没有未来保证
这种行为:
- 可能在某次 Dart 升级中消失
- 可能被当作 bug 修掉
- 不会被 IDE 或工具链认真支持
这意味着风险完全不可控。
3. 它并没有解决真正的问题
如果目的是:
那 Dart 已经提供了非常清晰、正式的方案:
// barrel.dart
export'entity.dart';
export'scene.dart';
使用时:
import'barrel.dart';
清楚、稳定、没有歧义。
这次“发现”真正有价值的地方
说实话,这个发现本身并没有给我带来什么“新技巧”。
但它让我再次确认了一件事:
在工程代码里,
“明确、啰嗦、可预期”永远比“聪明、隐晦、偶然有效”更重要。
这种边缘行为,适合被记录、被讨论,
但不适合被依赖。
写在最后
如果你哪天在 Dart 代码里也看到类似的东西:
import'';
我的建议只有一句:
删掉它。
知道它存在就够了,
没必要把它带进项目里。