此文章是翻译File Structure这篇React(版本v16.2.0)官方文档。
File Structure
这里有构建React 项目的推荐方法吗?
React 没有建议你怎样将文件放到文件夹中。也就是说在生态系统中你有几种通用方法,你可以需要去考虑。
按照特性或路由分组(Grouping by feature or routes)
一个构建项目的常用方式是按照特性或路由分组将本地CSS、JS 和测试一起。
common/
Avatar.js
Avatar.css
APIUtils.js
APIUtils.test.js
feed/
index.js
Feed.js
Feed.css
FeedStory.js
FeedStory.test.js
FeedAPI.js
profile/
index.js
Profile.js
ProfileHeader.js
ProfileHeader.css
ProfileAPI.js
“特性”的定义不是通用的,它取决于你选择的粒度。如果你不能列出一个顶级文件夹的列表,你可以问你的用户关于产品的主要组成部分是什么,并使用他们的心理模型(metal model)作为蓝图。
按照文件类型分组(Grouping by file type)
另一个通用的构建项目的方式是按照相似的文件在一起,例如:
api/
APIUtils.js
APIUtils.test.js
ProfileAPI.js
UserAPI.js
components/
Avatar.js
Avatar.css
Feed.js
Feed.css
FeedStory.js
FeedStory.test.js
Profile.js
ProfileHeader.js
ProfileHeader.css
有些人还喜欢进一步,根据应用程序中的角色将组件分离d到不同的文件夹。例如,Atomic Design是建立在这一原则基础上的设计方法。记住,把这些方法当作有用的例子来对待,而不是严格的遵循规则往往更有成效。
避免太多的嵌套(Avoid too much nesting)
在JavaScript项目中有许多与深层的目录嵌套相关的痛点。在它们之间编写相对导入变得更加困难,或者在文件被移动时更新这些导入。除非你有一个非常有说服力的理由使用深层文件夹结构,否则请考虑在单个项目中限制自己最多三个或四个嵌套文件夹。当然,这只是一个建议,它可能与你的项目无关。
不要想太多(Don't overthink it)
如果你只是开始一个项目,在选择项目结构上不要想太多。选择上述方式的任意一个(或者随你自己想法)开始写代码。在编写了一些真正的代码之后,你可能想要重新思考它。
如果你感到非常困惑,开始只需要将所有文件保存在一个文件夹中。最终它会变得足够大,以至于你想把一些文件与其他文件分开。到那时,你将有足够的知识来区分最常一起编辑的文件。一般来说,保持经常在一起改变文件在一起是一个好主意。这个原则被称为“托管(colocation)”。
随着项目规模的扩大,他们经常在实践中使用上述几种方法的组合。所以从一开始就选择“正确”并不是很重要。