开发:
不同环境下的malagu.yml配置:
- malagu框架本身支持通过-m 
的方式来加载使用不同的YAML配置文件,目前我的做法是开发时指定 malagu serve -m test,使用malagu-test.yml,构建的时候可以在命令行指定采用哪个环境的配置文件;  - 目前环境配置中差距比较多的是malagu.security.logoutSuccessUrl(登出成功后的跳转地址,pre和prod环境下的跳转域名不同)和malagu.typeorm.ormConfig(pre和prod环境使用的数据库不同)
 
开发环境下的webpack自定义配置:
- 通过hook文件夹下的webpack.ts文件进行扩展
- src/hook文件夹下可以配置钩子函数,webpack.ts可以更改serve和build的时候的前后端webpack配置
 - 通过HookContext.getConfiguration(BACKEND_TARGET, context.configurations)获取对应的webpack配置
 - 如图所示

 
 - 通过malagu.yml文件中的属性进行指定:
- 在malagu.yml文件中通过属性webpackHooks: -
,进行指定  - 如图


 
 - 在malagu.yml文件中通过属性webpackHooks: -
 
自定义中间件扩展
- 实现Middleware接口,在handle方法中进行处理,同时用@Componet(Middleware)进行修饰,注意:priority是决定中间件的执行顺序
 
- 并在入口文件module.ts中引入该文件
 - 
自定义view扩展
 使用@View(‘aaaa’)装饰器进行修饰
- 如图
 - 实现View接口,同时用@Componet(View)进行修饰:其中support函数接收@View(‘aaa’)装饰器中的参数值,比如’aaa’,同时返回true或者false,来决定要不要调用render方法;render函数接收第一步中return的值。
 - 如图
 - 在入口文件module.ts中,引入该文件
 - 如图
自定义malagu框架插件
 
调试:
- 参照以下JSON配置,在VSCODE中进行
{"type": "node","request": "launch","name": "malagu serve","program": "${workspaceRoot}/packages/cms-node/node_modules/@malagu/cli/bin/malagu-serve","cwd": "${workspaceRoot}/packages/cms-node/","sourceMaps": true,"env": {"NODE_ENV": "development"},"smartStep": true,"internalConsoleOptions": "openOnSessionStart","outputCapture": "std"},
 
打包:
- 运行malagu的打包脚本
 
malagu build -m <daily|pre|prod>
发布:
- 此发布脚本是根据我的工程进行的定制,本工程分为前后端来个子工程,前端工程位于src/browser,后端工程位于src/cms-node,前端工程运行yarn build打包后,会直接上传到OSS,后端工程会上传到Aone的函数计算平台,同时为了让后端工程能返回前端页面,会在前端构建完成后,将html页面拷贝至后端的构建目标文件夹中,和后端代码一起上传
 
#!/bin/bashcase $1 indaily)echo "publish daily env ..."__ENV__=daily;;pre)echo "publish pre-release env ..."__ENV__=pre;;prod)echo "publish online product env ..."__ENV__=prod;;*)echo "Usage: ./cmd_publish.sh [daily|pre|prod]"exit -1;;esac# 配置环境变量BUCKET="cms-platform-$__ENV__"REGION=cn-hangzhouPUBLIC_URL="//$BUCKET.oss-$REGION.aliyuncs.com"export PUBLIC_URL# 重置dist文件夹rm -rf distmkdir dist# 跳转到cms-node后端仓库cd ./packages/cms-node/rm -rf lib dist./node_modules/@malagu/cli/bin/malagu build -m $__ENV__mkdir ../../dist/cms-node/cp -r ./dist/backend/. ../../dist/cms-node/cp ./template.yml ../../dist/cms-node/cd ../../# 跳转到前端仓库cd ./packages/browser/rm -rf distyarn buildmkdir ../../dist/browser/cp -r ./dist/. ../../dist/browser/cp ./dist/index.html ../../dist/cms-node/cd ../../# 发布前端文件cd ./dist/browser/../../bin/pubToOSS.js -b $BUCKET -r $REGIONcd ../..# 发布cms-node服务cd ./dist/cms-node/../../node_modules/@ali/fun/dist/cli/fun.js deploy -s $__ENV__cd ../../
