工程目录结构

我们创建UmiJS后默认会创建一个简单的工程模板,此外UmiJS文档中也描述了一个推荐的工程目录最佳实践。UmiJS对于工程的目录结构有一些约定,我们应该按照规范的目录结构进行开发。

UmiJS工程目录结构详解

UmiJS官网给出的工程目录结构如下。

├── config
│   └── config.ts
├── public
├── dist
├── mock
│   └── app.ts|tsx
├── src
│   ├── .umi
│   ├── .umi-production
│   ├── layouts
│   │   ├── BasicLayout.tsx
│   │   ├── index.less
│   ├── models
│   │   ├── global.ts
│   │   └── index.ts
│   ├── pages
│   │   ├── index.less
│   │   └── index.tsx
│   ├── utils
│   │   └── index.ts
│   ├── services
│   │   └── api.ts
│   ├── app.(ts|tsx)
│   ├── global.ts
│   ├── global.(css|less|sass|scss)
│   ├── overrides.(css|less|sass|scss)
│   ├── favicon.(ico|gif|png|jpg|jpeg|svg|avif|webp)
│   └── loading.(tsx|jsx)
├── node_modules
│   └── .cache
│       ├── bundler-webpack
│       ├── mfsu
│       └── mfsu-deps
├── plugin.ts 
├── .umirc.ts
├── package.json
├── tsconfig.json
└── typings.d.ts

config/config.ts和.umirc.ts

该文件是UmiJS工程的配置文件,config/config.ts.umirc.ts用途是相同的,我们实际开发中选择一种配置方式即可(一般都使用config/config.ts),两种同时用会有烦人的优先级问题,不仅是前端开发任何工程都不应该把配置文件布置的过于分散。

避坑:这里尤其要注意,Umi4零配置也是可以正常启动调试、构建的,如果没有找到配置文件也不会有任何错误或是警告信息输出,如果你发现怎么改配置都不生效,可以考虑是不是配置文件是不是放错目录了(比如错放到了src下),或者写错文件名了。

public

public中可以放置静态资源文件,例如图片、音视频等。

dist

dist是工程编译的输出目录,我们实际部署工程到服务器时,部署dist中的内容就行了。

mock

mock目录中可以放置一些模拟接口,用于前后端分离开发时,后端接口还没开发完前端自己进行模拟的情况。

src/.umi和src/.umi-production

这两个是UmiJS框架的临时文件,分别会在本地调试(dev)和构建(build)时生成,其中包含的自动生成的代码会和我们的业务代码最终编译到一起。注意不要将.umi.umi-production提交到代码仓库,也不要修改其中的任何内容,这两个目录是由框架维护的,我们手动修改可能引发意想不到的错误。

此外,如果实际开发中.umi目录缺失造成IDE报错等情况,我们可以执行npm run setup重新生成临时目录。这里npm run setup实际执行的是umi setup

src/layouts

src/layouts包含了布局代码,布局可以和路由结合使用,用于显示类似管理后台的框架这类UI组件。

src/models

src/models是数据流插件放置数据模型代码的路径,如果不使用数据流插件,可以不创建。

src/pages

src/pages存放具体的页面代码。Umi4支持类似NextJS的基于文件路径的约定式路由,但实际上我个人还是认为应该使用在配置文件中声明路由的形式。

app.ts

app.ts是运行时的扩展配置文件,用于对路由、请求等组件进行运行时配置,比如request插件的拦截器就需要在这里进行配置,其中的代码是在浏览器端执行的。

global.ts和global.css

这两个文件包含全局运行时逻辑和样式,其中样式也支持Less等。

overrides.css

overrides.css专门用于对UI库中的样式进行覆盖,相比global.css它会添加body前缀抬高优先级。

favicon.ico

该文件是站点的favicon图标。

plugin.ts

在这个文件中,可以使用UmiJS的插件API创建项目级的插件逻辑。

package.json

npm工程描述文件。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。