UNPKG

generator-wxnode-boilerplate

Version:

Yeoman generator for wxnode boilerplate

169 lines (114 loc) 5.13 kB
## 简介 node boilerplate 的大致架构是通过 rpcAgent+PB 来实现 node 中间层调用后台服务。Node 业务层则是采用 Koa2 框架,使用 Typescript 做代码错误检索。整个项目是针对于 WXG 内部后台开发和运维部署模式,抽象一套可以直接运行的基础代码模板。 该 boilerplate 提供了以下 feature: * 使用 Typescript 语法开发 * 本地开发,无需 rz 同步 * 完全适应 WXG 内部运维体系 * Vue 作为 View 层语法开发(可选) * 最新 webpack4 编译 ## 快速上手 初次启动,需要配置 node_modules 包、编译对应的 PB 文件,下载 submodule ``` npm run init ``` 启动本地开发: ``` npm start ``` 然后直接打开: http://127.0.0.1:8081/server ,可以看到预览界面。 ## 业务配置 业务配置文件为: /config/index.js。里面内容主要是和运维服务、本地项目开发相关。其中: * IDKEY: 用来进行 idkey 上报,这个需要自行到 weixin.oa.com 上申请 * SYSMETA: 运维在服务器上的配置信息,里面主要是给 fastreject 中间件使用的 * RpcPort/RpcHost: 设置本地和线上开发的 RPC 服务 * MOCK_REFERER: 内网 SSR 服务发起时,校验的 referer,不是很重要。 * ENABLE_CACHED/CachePort/CacheHost: 使用 memorycached 服务相关的配置。memorycached 需要自行在服务器上配置。 开启脚本统一使用: ``` npm run build ``` 其中对应的 node 程序,pm2 管理程序,都需要你手动配置到你开发机的模块上。 ## 部署 当在本机已经调试完毕后,需要通过到开发机上进行编译部署。基本步骤就是,你需要手动将 git 仓库拉到开发机,然后运行下列命令: ``` // 安装所有依赖 tnpm install // 安装额外依赖 tnpm install pm2 ffi --no-save // (编译机上运行) // 启动编译 tnpm run build:rpc // 编译 pb 文件 tnpm run build:app // 编译 node 文件 // 如果你有依赖前端 Vue 项目资源的话,还需要执行前端编译 tnpm run ssr:client tnpm run ssr:server ``` 至此,你的项目就已经完整的编译出来了。剩下的去 weixin.oa.com 上提新单进行同步操作。 ## 日志 WXG 内部服务有三种,另外额外加上本地的错误日志 log4js: * 调用关系:用来记录一个 cgi 里面,调用的所有的 rpc 服务记录追踪。现在已经提供一个中间件来处理。 ``` if (rule.cmdId) { params.unshift(cmdIdMid(rule.cmdId)); } ``` * idkey 上报: 服务器端的 PV 上报。 * mmdata: 日志上报,私有日志上报,也是使用 rpc 来进行上报调用。 * log4js 日志 **配置:** * 调用关系在 weixin.oa.com 上申请,额外配置找 dendiwu。 * mmdata 需要后台服务封装,通过 rpc 调用(可支持) * idkey 调用 kit 已经提供 * log4js 服务器上,需要安装 pm2-intercom 用于收集各实例的日志。否则用不了。 ### 运维机器配置 **sysmeta.conf** 基本的系统配置,如果是测试机,还有 HostRole 字段。 [General] #IDCName = shenzhen IDCName = shanghai Product = mm HostRole = 1 # 测试机上设置的字段 **cmdb.conf** - rpc port 和 host 在哪读? - server Port 在哪读? - cache port 怎么搞?有多台机器共享的话,这个服务怎么弄?混布? - pm2, memorycached, node 第三方服务怎么搞? ## 应用目录 @dendiwu - 模块名 - node(指定的node版本) - application(项目代码) - .pm2(模块、运行时) ## 代码目录 - app: ts=>js,最后的server端代码 - dist: 前端资源打包目录 - logs: 本地日志(部署后有指定的目录) - protobuf - proto文件 - config.js 接口配置信息 - protobuf.js 所有proto文件生成的js对象 - protobuf.ts 所有proto参数的ts定义 - public: - 404页面\500页面 - 模板 - build: 构建配置 - script: - start-dev.js: 启动本地开发 HMR client 和 server 端. - src: - @core: 一些基本的中间件和rpc调用封装,我们准备把他做成submodule,尽量一起来更新和维护这里的逻辑 - 别的目录可以自己按需组织 - pm2.config.js: 用来交给运维运行 pm2 命令配置文件. ## TODO - 封装 config 文件 - 整理 node 和 client 文件目录 - 暴露一下 @core 里面的所有方法和文件 - 抽离一下 router 里面路由配置 - 写一下接入指南 ## 部署 部署环境依赖 `pm2``ffi` 这两个包,需要在编译机上进行安装,由于本地不需要且安装比较麻烦,所以没有添加到依赖中 - package.json 里面的 deploy 命令 - 以及,dev:server 下面的 mmbizwxa_applicationname_node.js 文件名 - git clone 下来的文件目录名 - node/mmbizwxa_appliation_node.ts 的重命令文件 - config/index.js 里面的 APPLICATION_NAME 字段 - IDKEY ## 安装问题 > 部署环境依赖 pm2 和 ffi 这两个包,需要在编译机上进行安装,由于本地不需要且安装比较麻烦,所以没有添加到依赖中。所以,你需要在编译机上手动安装。