Dart文档中“avoid imports of package:package_name/src/”的含义疑问
嘿,这个问题问得很到位,其实文档里这句话是两者的情况都涵盖的,我给你掰扯清楚:
先把文档里的提示内容再明确下:
For the best performance when developing with the development JavaScript compiler through webdev serve, put implementation files under /lib/src, instead of elsewhere under /lib. Also, avoid imports of package:package_name/src/....
1. 针对其他外部包的情况
Dart生态里有个默认约定:包的lib/src/目录是专门放私有实现细节的地方,包作者不会把这里的内容当作对外公开的API。如果你在自己的代码里用package:other_package/src/xxx.dart导入外部包的src内容,风险很大——这些内部代码随时可能被包作者修改、移除,完全没有向后兼容的保证,哪天依赖包一更新,你的代码大概率会报错。所以文档首先是在提醒你别碰外部包的私有实现。
2. 针对你自己的包内部的情况
哪怕是你自己写的包,文档也建议别用package:your_own_package/src/...这种方式导入内部代码,而是用相对路径导入(比如../src/utils.dart)。原因有两个:
- 性能层面:用webdev serve开发Web应用时,相对导入能让开发用的JS编译器更快定位文件,提升开发时的编译速度,这也是文档前面半句提到的性能优化的配套建议;
- 代码规范层面:内部代码用相对路径,对外暴露的API统一放在
lib根目录(比如lib/your_package.dart),这样代码结构更清晰,也能避免不小心把内部实现当成公开API对外暴露的情况。
总结下来就是,不管是别人的包还是你自己的包,都要避免用package:xxx/src/...这种导入方式,前者是为了避免依赖不稳定的私有代码,后者是为了性能和代码规范。
备注:内容来源于stack exchange,提问作者anonymous-dev

