Guides

项目结构

Malagu 的项目目录并没有特殊的要求,就是一个普普通通的 Node.js 项目就好。一般情况下会有一个 package.json 文件负责依赖的管理,而 Malagu 框架自身的能力也是通过 NPM 包的形式提供。

Malagu 的项目目录并没有特殊的要求,就是一个普普通通的 Node.js 项目就好。一般情况下会有一个 package.json 文件负责依赖的管理,而 Malagu 框架自身的能力也是通过 NPM 包的形式提供。我们可以根据需要选择合适的 Malagu 组件包,添加到 package.json 文件。

不过,有一个 Malagu 框架支持的特有配置文件: malagu[-mode].yml。该文件主要用于自定义 Malagu 各种组件的属性配置。后面会详细介绍 Malagu 框架的组件属性机制。属性配置文件也不是必须的。

另外,Malagu 在前后端应用开发做了更高维度的抽象。所以在不同的业务场景,项目的目录结构会有些许不同。这些目录结构大多是来自社区地积累,并非 Malagu 独创。目录的设计有一定的逻辑可循,方便开发者举一反三。

需要强调的一点:Malagu 框架自身不会强制限制目录结构,只是有一套最佳实践提供给开发者使用。开发者完全可以根据自己的场景,定义项目的目录结构。

纯后端项目目录结构

  • README.md
  • malagu.yml 组件配置文件,默认会加载
  • package.json
  • src/
    • home-controller.ts 业务代码
    • module.ts 组件模块入口文件
    • user-controller.ts 业务代码
  • test/
    • home-controller.spec.ts 业务代码的测试代码
  • node_modules/
  • tsconfig.json ts 语言编译配置文件
  • yarn.lock

  • 项目架构:由于 Malagu 世界一切皆组件,所以项目本身也是一个组件,所以 Malagu 组件拥有的能力,项目同样也有,并且是统一的,并不会有什么特殊的地方。
    所以,我们又称项目为根组件,根组件与它所依赖的组件形成了一颗组件树
  • 业务代码:业务代码与我们平时写的代码并没有什么不同。只是 Malagu 通过组件的方式,提供了一系列开箱即用的基础能力。
  • 组件模块入口文件: 一个组件可以存在多个模块,每一个模块都会有一个入口文件,这些入口文件在合适的时机,会由 Malagu 命令行工具依次加载并进行组装。 对于简单的项目,一个模块就够了,复杂的项目可以根据需要合理组织模块,便于代码管理与维护。
    比如前后端一体化项目(见下文),一般会有两个模块,一个模块是前端模块,另一个是后端模块。前后端一体化组件如何做到分别打包输出到不同的构建产物中,其实就是通过模块来划分的。

因为项目本身就是组件,所以上述原则对组件同样适用。Malagu 有两种模式来确定组件有哪些模块:约定目录组件属性配置

前后端一体项目目录结构

  • README.md
  • malagu.yml
  • package.json
  • node_modules/
  • src
    • browser 前端代码目录
      • assets/ 资源文件目录
      • style/ 样式文件目录
      • css-shims.d.ts 类型定义文件
      • hello.view.tsx 页面级组件代码
      • module.ts 前端模块入口文件
    • common 前后端公共代码目录
      • welcome-protocol.ts 前后端都会用的的接口定义、工具方法与类
    • node # 后端代码目录
      • module.ts 后端模块入口文件
      • welcome-server.ts 后端业务逻辑代码
  • tsconfig.json

  • 上述示例目录结构划分不是框架强行限制的,只是一个最佳实践,开发者完全可以按照自己的逻辑组织代码;但是一般情况下,我们建议使用这种规范来组织代码,会使代码更加清晰。
  • 前后端代码最终会分别进行打包编译输出到构建目录:
    • 资源文件目录:如果有些非代码文件希望打包到构建目录,可以放在资源文件目录,命令行工具在打包的时候,会主动拷贝到构建目录。前后端都会有自己的资源文件目录,各种拷贝,参阅资源文件目录文档。
    • 前后端公共代码目录:这部分代码是前后端业务共享的,极大提高代码的复用,让前后端共同逻辑保持统一。

相关链接


Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号