Malagu 提供了一个很强大的命令行工具 @malagu/cli ,设计思路部分借鉴了 @vue/cli 。我们的应用初始化、运行、构建和部署等等操作都是基于该命令行工具完成。更多有关命令行工具文档。

完整体验

Malagu 完整体验.gif

快速初始化

首先,我们需要先安装 @malagu/cli 命令行工具,然后使用 [malagu init](https://www.yuque.com/cellbang/malagu/xbfpir#gRvs4) 命令初始化一个模板应用, malagu init 可以指定项目名称和模板,如果不指定,则会让您选择一个合适的模板,并且项目名称为模板名称。

  1. npm i -g @malagu/cli
  2. malagu init
  3. ## 国内用户可以使用淘宝镜像源加速
  4. npm i @malagu/cli -g --registry=https://registry.npm.taobao.org
  5. malagu init

选择模板:

  1. test malagu init
  2. ___
  3. /'\_/`\ /\_ \
  4. /\ \ __ \//\ \ __ __ __ __
  5. \ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
  6. \ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
  7. \ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
  8. \/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
  9. /\____/
  10. @malagu/cli@1.34.0 \_/__/
  11. ╭──────────────────────────────────────────────────╮
  12. │ Serverless Frist Development Framework │
  13. ╰──────────────────────────────────────────────────╯
  14. ? Select a template to init (Use arrow keys or type to search)
  15. ❯ backend-app Official
  16. sample-app Official
  17. fc-app Official
  18. vue-app Official
  19. database-app Official
  20. schedule Official
  21. admin-app Official
  22. microservice Official
  23. file-service Official
  24. puppeteer Official
  25. monorepo Official
  26. mycli Official

选择完模板类型后,会基于该模板创建好应用,并安装好相关依赖。安装的时候,命令行工具根据当前环境,智能选择包管理器。如果环境中只存在 npm 工具,则选择 npm,否则优先使用 yarn 工具。这里选择 [backend-app](https://www.yuque.com/cellbang/malagu/xnovso) 模板,应用初始化好后,效果如下:

  1. test malagu init
  2. ___
  3. /'\_/`\ /\_ \
  4. /\ \ __ \//\ \ __ __ __ __
  5. \ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
  6. \ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
  7. \ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
  8. \/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
  9. /\____/
  10. @malagu/cli@1.34.0 \_/__/
  11. ╭──────────────────────────────────────────────────╮
  12. │ Serverless Frist Development Framework │
  13. ╰──────────────────────────────────────────────────╯
  14. ? Select a template to init backend-app Official
  15. yarn install v1.22.4
  16. [1/4] 🔍 Resolving packages...
  17. success Already up-to-date.
  18. ✨ Done in 0.66s.
  19. Success! Initialized "backend-app" example in /Users/kevin/js/test/backend-app.

初始化后的项目关键目录结构如下:

  1. .
  2. ├── src
  3. ├── module.ts # 模块入口文件
  4. └── home-controller.ts
  5. ├── tsconfig.json
  6. └── package.json

您会发现 Malagu 的应用没有应用启动入口文件,本质上是有的,只不过框架默认实现了应用启动入口文件。绝大部分情况,开发者无需关心。当然,开发也可以自定义入口文件。

在 Malagu 的世界里面:一切皆组件应用也是一个组件,是一个根组件。组件也是一个普通的 nodejs 包。这也说明了开发自定义组件极其简单且统一。唯一需要注意的是框架会约定模块入口文件的加载位置。当然,模块入口文件加载位置也是可以自定义的。Malagu 的一个核心设计原则:约定大于配置

本地运行应用

Malagu 命令行工具提供了一个支持 HMR(热模块替换)能力的本地运行命令 [malagu serve](https://www.yuque.com/cellbang/malagu/xbfpir#Jli2K) 。另外,除了 malagu init 命令外,其他命令都是应用上下文感知命令,也就是说,Malagu 会把这些命令委托给应用中依赖的 @malagu/cli-service 去执行。这么做的好处是让全局命令的行为永远与当前应用依赖的框架版本保持一致,同时,也让 @malagu/cli 体积变小且稳定,安装速度很快,也无需经常升级。

  1. malagu serve
  2. open http://localhost:3000
  1. backend-app malagu serve
  2. ___
  3. /'\_/`\ /\_ \
  4. /\ \ __ \//\ \ __ __ __ __
  5. \ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
  6. \ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
  7. \ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
  8. \/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
  9. /\____/
  10. @malagu/cli@1.34.0 \_/__/
  11. ╭──────────────────────────────────────────────────╮
  12. │ Serverless Frist Development Framework │
  13. ╰──────────────────────────────────────────────────╯
  14. malagu mode - local
  15. malagu component - @malagu/core@latest
  16. malagu component - @malagu/web@1.34.0
  17. malagu component - @malagu/mvc@latest
  18. malagu component - @malagu/cloud@1.34.0
  19. malagu component - @malagu/schedule@1.34.0
  20. malagu component - @malagu/faas-adapter@1.34.0
  21. malagu component - @malagu/scf-adapter@latest
  22. malagu component - backend-app@0.0.0
  23. malagu target - backend
  24. malagu module - @malagu/web/lib/common/module
  25. malagu module - @malagu/web/lib/node/module
  26. malagu module - @malagu/mvc/lib/node/module
  27. malagu module - @malagu/cloud/lib/node/module
  28. malagu module - @malagu/schedule/lib/node/module
  29. malagu module - @malagu/faas-adapter/lib/node/module
  30. malagu module - @malagu/scf-adapter/lib/node/module
  31. malagu module - backend-app/src/module
  32. backend build [====================] 98% (1.9 seconds)
  33. DONE Compiled successfully in 1811ms
  34. I The backend is running at http://localhost:3000
  35. backend build [====================] 99% (1.9 seconds)
  36. [HMR] Waiting for update signal from WDS...
  37. Build completed in 2.262s

支持 HMR 功能,修改代码无需重启,快速调试验证。另外,Malagu 模板默认提供了与 vscode 单步调试能力,开箱即用。

部署应用

Malagu 框架提供了 [malagu deploy](https://www.yuque.com/cellbang/malagu/xbfpir#rvYcG) 命令用于部署。与传统框架最大的区别在于提供了体验极致的一键部署、多环境支持、开箱即用的 CICD 能力。该能力的实现得益于 Serverless 技术的发展。

目前选择的模板 backend-app 使用阿里云函数计算作为部署平台。我们可以看到项目的 package.json 文件中依赖了 @malagu/fc-adapter 组件,当我们部署的时候,框架发现项目依赖了该组件,则自动部署到阿里云函数计算平台。如果想部署到其他云平台或者传统的服务器上,切换成对应的适配器组件即可。

  1. malagu deploy

如果您是首次部署,命令行工具会自动提示您输入云平台相关的访问秘钥信息(AccessKey),您也可以在项目根目录下执行 malagu config 手动配置或修改访问秘钥信息。更多有关平台访问秘钥配置

  1. backend-app malagu config
  2. ___
  3. /'\_/`\ /\_ \
  4. /\ \ __ \//\ \ __ __ __ __
  5. \ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
  6. \ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
  7. \ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
  8. \/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
  9. /\____/
  10. @malagu/cli@1.34.0 \_/__/
  11. ╭──────────────────────────────────────────────────╮
  12. │ Serverless Frist Development Framework │
  13. ╰──────────────────────────────────────────────────╯
  14. ? Account Id ***********3699
  15. ? Access Key Id ***********nd5G
  16. ? Access Key Secret ***********UXJo
  17. ? Default region name (Use arrow keys)
  18. ❯ ap-guangzhou
  19. ap-shanghai
  20. ap-beijing
  21. ap-chengdu
  22. ap-hongkong
  23. ap-mumbai
  24. ap-singapore
  25. (Move up and down to reveal more choices)

部署成功后的效果图如下:

  1. Deploying backend-app to the ap-guangzhou region of SCF...
  2. - SCF:
  3. Skip default namespace
  4. Create backend-app function
  5. Publish Version 1
  6. Create test alias to version 1
  7. - API Gateway:
  8. Update malagu service
  9. Create backend-app api
  10. - Url: https://service-e6ozizj8-123456.gz.apigw.tencentcs.com/test/backend-app/
  11. Release test environment
  12. Deploy finished