开发:
不同环境下的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/bash
case $1 in
daily)
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-hangzhou
PUBLIC_URL="//$BUCKET.oss-$REGION.aliyuncs.com"
export PUBLIC_URL
# 重置dist文件夹
rm -rf dist
mkdir 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 dist
yarn build
mkdir ../../dist/browser/
cp -r ./dist/. ../../dist/browser/
cp ./dist/index.html ../../dist/cms-node/
cd ../../
# 发布前端文件
cd ./dist/browser/
../../bin/pubToOSS.js -b $BUCKET -r $REGION
cd ../..
# 发布cms-node服务
cd ./dist/cms-node/
../../node_modules/@ali/fun/dist/cli/fun.js deploy -s $__ENV__
cd ../../