开发:

不同环境下的malagu.yml配置:

  1. malagu框架本身支持通过-m 的方式来加载使用不同的YAML配置文件,目前我的做法是开发时指定 malagu serve -m test,使用malagu-test.yml,构建的时候可以在命令行指定采用哪个环境的配置文件;
  2. 目前环境配置中差距比较多的是malagu.security.logoutSuccessUrl(登出成功后的跳转地址,pre和prod环境下的跳转域名不同)和malagu.typeorm.ormConfig(pre和prod环境使用的数据库不同)

开发环境下的webpack自定义配置:

  1. 通过hook文件夹下的webpack.ts文件进行扩展
    1. src/hook文件夹下可以配置钩子函数,webpack.ts可以更改serve和build的时候的前后端webpack配置
    2. 通过HookContext.getConfiguration(BACKEND_TARGET, context.configurations)获取对应的webpack配置
    3. 如图所示image.png
  2. 通过malagu.yml文件中的属性进行指定:
    1. 在malagu.yml文件中通过属性webpackHooks: -,进行指定
    2. 如图image.pngimage.png

自定义中间件扩展

  1. 实现Middleware接口,在handle方法中进行处理,同时用@Componet(Middleware)进行修饰,注意:priority是决定中间件的执行顺序
  2. image.png
  3. 并在入口文件module.ts中引入该文件
  4. 自定义view扩展

  5. 使用@View(‘aaaa’)装饰器进行修饰

  6. 如图
  7. 实现View接口,同时用@Componet(View)进行修饰:其中support函数接收@View(‘aaa’)装饰器中的参数值,比如’aaa’,同时返回true或者false,来决定要不要调用render方法;render函数接收第一步中return的值。
  8. 如图
  9. 在入口文件module.ts中,引入该文件
  10. 如图

    自定义malagu框架插件

调试:

  1. 参照以下JSON配置,在VSCODE中进行
    1. {
    2. "type": "node",
    3. "request": "launch",
    4. "name": "malagu serve",
    5. "program": "${workspaceRoot}/packages/cms-node/node_modules/@malagu/cli/bin/malagu-serve",
    6. "cwd": "${workspaceRoot}/packages/cms-node/",
    7. "sourceMaps": true,
    8. "env": {
    9. "NODE_ENV": "development"
    10. },
    11. "smartStep": true,
    12. "internalConsoleOptions": "openOnSessionStart",
    13. "outputCapture": "std"
    14. },

打包:

  1. 运行malagu的打包脚本
  1. malagu build -m <daily|pre|prod>

发布:

  1. 此发布脚本是根据我的工程进行的定制,本工程分为前后端来个子工程,前端工程位于src/browser,后端工程位于src/cms-node,前端工程运行yarn build打包后,会直接上传到OSS,后端工程会上传到Aone的函数计算平台,同时为了让后端工程能返回前端页面,会在前端构建完成后,将html页面拷贝至后端的构建目标文件夹中,和后端代码一起上传
  1. #!/bin/bash
  2. case $1 in
  3. daily)
  4. echo "publish daily env ..."
  5. __ENV__=daily
  6. ;;
  7. pre)
  8. echo "publish pre-release env ..."
  9. __ENV__=pre
  10. ;;
  11. prod)
  12. echo "publish online product env ..."
  13. __ENV__=prod
  14. ;;
  15. *)
  16. echo "Usage: ./cmd_publish.sh [daily|pre|prod]"
  17. exit -1
  18. ;;
  19. esac
  20. # 配置环境变量
  21. BUCKET="cms-platform-$__ENV__"
  22. REGION=cn-hangzhou
  23. PUBLIC_URL="//$BUCKET.oss-$REGION.aliyuncs.com"
  24. export PUBLIC_URL
  25. # 重置dist文件夹
  26. rm -rf dist
  27. mkdir dist
  28. # 跳转到cms-node后端仓库
  29. cd ./packages/cms-node/
  30. rm -rf lib dist
  31. ./node_modules/@malagu/cli/bin/malagu build -m $__ENV__
  32. mkdir ../../dist/cms-node/
  33. cp -r ./dist/backend/. ../../dist/cms-node/
  34. cp ./template.yml ../../dist/cms-node/
  35. cd ../../
  36. # 跳转到前端仓库
  37. cd ./packages/browser/
  38. rm -rf dist
  39. yarn build
  40. mkdir ../../dist/browser/
  41. cp -r ./dist/. ../../dist/browser/
  42. cp ./dist/index.html ../../dist/cms-node/
  43. cd ../../
  44. # 发布前端文件
  45. cd ./dist/browser/
  46. ../../bin/pubToOSS.js -b $BUCKET -r $REGION
  47. cd ../..
  48. # 发布cms-node服务
  49. cd ./dist/cms-node/
  50. ../../node_modules/@ali/fun/dist/cli/fun.js deploy -s $__ENV__
  51. cd ../../