Malagu 提供了一个很强大的命令行工具 @malagu/cli
,设计思路部分借鉴了 @vue/cli
。我们的应用初始化、运行、构建和部署等等操作都是基于该命令行工具完成。更多有关命令行工具文档。
完整体验
快速初始化
首先,我们需要先安装 @malagu/cli
命令行工具,然后使用 [malagu init](https://www.yuque.com/cellbang/malagu/xbfpir#gRvs4)
命令初始化一个模板应用, malagu init
可以指定项目名称和模板,如果不指定,则会让您选择一个合适的模板,并且项目名称为模板名称。
npm i -g @malagu/cli
malagu init
## 国内用户可以使用淘宝镜像源加速
npm i @malagu/cli -g --registry=https://registry.npm.taobao.org
malagu init
选择模板:
➜ test malagu init
___
/'\_/`\ /\_ \
/\ \ __ \//\ \ __ __ __ __
\ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
\ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
\ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
\/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
/\____/
@malagu/cli@1.34.0 \_/__/
╭──────────────────────────────────────────────────╮
│ Serverless Frist Development Framework │
╰──────────────────────────────────────────────────╯
? Select a template to init (Use arrow keys or type to search)
❯ backend-app Official
sample-app Official
fc-app Official
vue-app Official
database-app Official
schedule Official
admin-app Official
microservice Official
file-service Official
puppeteer Official
monorepo Official
mycli Official
选择完模板类型后,会基于该模板创建好应用,并安装好相关依赖。安装的时候,命令行工具根据当前环境,智能选择包管理器。如果环境中只存在 npm 工具,则选择 npm,否则优先使用 yarn 工具。这里选择 [backend-app](https://www.yuque.com/cellbang/malagu/xnovso)
模板,应用初始化好后,效果如下:
➜ test malagu init
___
/'\_/`\ /\_ \
/\ \ __ \//\ \ __ __ __ __
\ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
\ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
\ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
\/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
/\____/
@malagu/cli@1.34.0 \_/__/
╭──────────────────────────────────────────────────╮
│ Serverless Frist Development Framework │
╰──────────────────────────────────────────────────╯
? Select a template to init backend-app Official
yarn install v1.22.4
[1/4] 🔍 Resolving packages...
success Already up-to-date.
✨ Done in 0.66s.
Success! Initialized "backend-app" example in /Users/kevin/js/test/backend-app.
初始化后的项目关键目录结构如下:
.
├── src
│ ├── module.ts # 模块入口文件
│ └── home-controller.ts
├── tsconfig.json
└── 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
体积变小且稳定,安装速度很快,也无需经常升级。
malagu serve
open http://localhost:3000
➜ backend-app malagu serve
___
/'\_/`\ /\_ \
/\ \ __ \//\ \ __ __ __ __
\ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
\ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
\ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
\/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
/\____/
@malagu/cli@1.34.0 \_/__/
╭──────────────────────────────────────────────────╮
│ Serverless Frist Development Framework │
╰──────────────────────────────────────────────────╯
malagu mode - local
malagu component - @malagu/core@latest
malagu component - @malagu/web@1.34.0
malagu component - @malagu/mvc@latest
malagu component - @malagu/cloud@1.34.0
malagu component - @malagu/schedule@1.34.0
malagu component - @malagu/faas-adapter@1.34.0
malagu component - @malagu/scf-adapter@latest
malagu component - backend-app@0.0.0
malagu target - backend
malagu module - @malagu/web/lib/common/module
malagu module - @malagu/web/lib/node/module
malagu module - @malagu/mvc/lib/node/module
malagu module - @malagu/cloud/lib/node/module
malagu module - @malagu/schedule/lib/node/module
malagu module - @malagu/faas-adapter/lib/node/module
malagu module - @malagu/scf-adapter/lib/node/module
malagu module - backend-app/src/module
backend build [====================] 98% (1.9 seconds)
DONE Compiled successfully in 1811ms
I The backend is running at http://localhost:3000
backend build [====================] 99% (1.9 seconds)
[HMR] Waiting for update signal from WDS...
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
组件,当我们部署的时候,框架发现项目依赖了该组件,则自动部署到阿里云函数计算平台。如果想部署到其他云平台或者传统的服务器上,切换成对应的适配器组件即可。
malagu deploy
如果您是首次部署,命令行工具会自动提示您输入云平台相关的访问秘钥信息(AccessKey),您也可以在项目根目录下执行 malagu config
手动配置或修改访问秘钥信息。更多有关平台访问秘钥配置。
➜ backend-app malagu config
___
/'\_/`\ /\_ \
/\ \ __ \//\ \ __ __ __ __
\ \ \__\ \ /'__`\ \ \ \ /'__`\ /'_ `\/\ \/\ \
\ \ \_/\ \/\ \L\.\_ \_\ \_/\ \L\.\_/\ \L\ \ \ \_\ \
\ \_\\ \_\ \__/.\_\/\____\ \__/.\_\ \____ \ \____/
\/_/ \/_/\/__/\/_/\/____/\/__/\/_/\/___L\ \/___/
/\____/
@malagu/cli@1.34.0 \_/__/
╭──────────────────────────────────────────────────╮
│ Serverless Frist Development Framework │
╰──────────────────────────────────────────────────╯
? Account Id ***********3699
? Access Key Id ***********nd5G
? Access Key Secret ***********UXJo
? Default region name (Use arrow keys)
❯ ap-guangzhou
ap-shanghai
ap-beijing
ap-chengdu
ap-hongkong
ap-mumbai
ap-singapore
(Move up and down to reveal more choices)
部署成功后的效果图如下:
Deploying backend-app to the ap-guangzhou region of SCF...
- SCF:
✔ Skip default namespace
✔ Create backend-app function
✔ Publish Version 1
✔ Create test alias to version 1
- API Gateway:
✔ Update malagu service
✔ Create backend-app api
- Url: https://service-e6ozizj8-123456.gz.apigw.tencentcs.com/test/backend-app/
✔ Release test environment
Deploy finished