1. 需要了解的目录及文件:
- src/.umi目录
建立第一个 Umi
项目并启动后,可能会有一个疑问:这个项目的启动文件在哪呢?一般来说,我们通过 React
的脚手架建立的项目中,在src文件夹的根目录会有一个index.js文件,在index.js里我们通过 ReactDOM
的 render
命令来启动项目。然而在 Umi
的项目中,src根目录下并没有index.js文件,也找不到 render
这样的指令代码。
查看 package.json 文件里的 start 命令,我们知道项目的是通过umi指令启动的,而umi启动的入口文件,其实就是 src/.umi/umi.ts。
从官网的文档我们可以了解到,.umi是一个临时文件夹,.umi 临时目录是整个 Umi 项目的发动机,入口文件、路由等等都在这里,这些是由 umi 内部插件及三方插件生成的。
同时,临时文件是 Umi 框架中非常重要的一部分,框架或插件会根据你的代码生成临时文件,这些原来需要放在项目里的脏乱差的部分都被藏在了这里。因为他的临时性,每次启动 umi 时都会被删除并重新生成。
- .umirc.ts
项目的基础配置则是放在项目根目录的.umirc.ts文件中。如果需要多平台复杂配置,则不用.umirc.ts文件,在根目录下建立config文件夹,在文件夹下建立多个文件进行配置。例如以下示例:
当我们改变配置时,重新启动项目,src/.umi目录下的内容就会根据我们的配置重新生成,也就是说,这个入口文件夹里的内容是在我们编码过程中,根据我们的配置和插件内容的变化而动态变化生成的。
- .env
环境变量,例如:
// 端口
PORT = 8001
- src/global.tsx,src/global.less
另外我们还可以在src的根目录建立global.tsx,global.less这里两个文件,这两个文件默认会在项目启动前被引入,global.less可以放置一些全局的样式,global.tsx可以处理一些全局性的异步事件等。
例如,在global.less里,可以对html,body,以及根节点 root
做一些样式设置:
...
html,
body,
#root {
height: 100%;
}
.ant-layout {
min-height: 100vh;
}
...
- src/app.tsx
运行时配置文件,先于入口文件运行。
运行顺序:global.tsx > app.tsx > umi.ts
2. 约定化的思想:
以下内容转自:http://www.zyiz.net/tech/detail-140738.html
umi的很多东西都是约定式的。所谓约定式就是指,按照约定好的方式开发,就能达到某种效果,中间的过程由框架帮我们完成。例如:
- 建一个 locales 目录,就拥有了国际化
- 建一个 models 目录,就拥有了数据流
- 建一个 mock 目录,就拥有了数据 mock
- 建一个 access.ts 文件,就拥有了权限策略
- ...
这看起来是非常黑盒非常酷的,用这种方式其实对于团队代码风格的统一是非常有好处的,直接在框架层面就约束了大家的目录组织模式,便于团队维护。
但是缺点也是挺明显的,灵活性不如配置式的高,因为只能按特定的模式来开发,如果原本约定的方式不满足业务需求,就需要额外开发 Umi
插件来魔改原本的功能。而且约定式的开发是相对其他框架来说很特别的一点,对新上手的同学来说需要时间去通读官网文档了解约定式的规则。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。