目標:讓新人能夠快速上手開發友好速搭定制插件
1. 如何開發?
1.1 開發規范
- 編碼規范
- 命名
- 介面名稱:小駝峰,比如:/api/v1/user/verify/resetStep
- 函式名稱:小駝峰
- 變數名稱:小駝峰
- 函式大小:越小越好,不超過20行,
- 單元測驗
- 要求:
- API測驗100%
- 主要的service測驗
- 要求:
- 命名
- 安全規范
- 密碼規范
- 不使用弱密碼
- 代碼中的密碼通過環境變數引入
- 證書檔案:不要直接放在代碼中,保存到服務器后用環境變數的方式引入路徑,
- npm包
- 如何挑選高質量的 Node.js 模塊?
- 使用https://npms.io/查找包
- npm install安裝時fix高危漏洞:
npm audit fix
- 開放性配置
- 資料庫: 正式環境的資料庫只對內網開放,
- 密碼規范
git規范
提交代碼
- 參考:egg提交代碼規范
- 提交型別:
- feat: 新功能
- fix: 修復問題
- docs: 修改檔案
- style: 修改代碼格式,不影響代碼邏輯
- refactor: 重構代碼,理論上不影響現有功能
- perf: 提升性能
- test: 增加修改測驗用例
- chore: 修改工具相關(包括但不限于檔案、代碼生成等)
- deps: 升級依賴
格式
<type:提交 commit 的型別>(scope:修改檔案的范圍): <subject:用一句話清楚的描述這次提交做了什么> <BLANK LINE>
<body補充 subject,適當增加原因、目的等相關因素,也可不寫,>
<BLANK LINE>
<footer: 當有非兼容修改(Breaking Change)時必須在這里描述清楚,關聯issue,如果功能點有新增或修改的,還需要關聯檔案 doc 和 egg-core 的 PR>示例
fix($compile): [BREAKING_CHANGE] couple of unit tests for IE9
Older IEs serialize html uppercased, but IE9 does not...
Would be better to expect case insensitive, unfortunately jasmine does
not allow to user regexps for throw expectations.
Document change on eggjs/egg#123
Closes #392
BREAKING CHANGE:
Breaks foo.bar api, foo.baz should be used instead
專案檔案規范
API檔案
- apidoc: 使用apidoc構建api檔案
- 常用標簽說明
- @api: api 方法和路徑說明,格式@api {method} path [title]
- @apiVersion:版本
- @apiName:介面名稱,每一個介面注釋里都應該添加該欄位,在匯出的介面檔案里會已該欄位值作為導航子標題,如果兩個介面的@apiVersion和@apiName一樣,那么有一個介面的注釋將會被覆寫(介面檔案里不會展示)
- @apiGroup: 定義介面所屬的介面組,雖然介面定義里不需要這個引數,但是您應該在每個介面注釋里都添加這個引數,因為匯出的介面檔案會以介面組的形式導航展示,
- @apiDescription: api介面的詳細描述
- @apiParam: 介面請求體引數
- @apiSuccess: 介面成功回傳引數
- @apiSuccessExample: 回傳成功示例
- 事例:
/** * @api {GET} /api/v1/manager/course/:courseId/video 課程管理-查詢課程的視頻資訊
* @apiVersion 1.0.0
* @apiName ManagerGetCourseVideo
* @apiGroup ManagerCourse
*
* @apiDescription 課程管理-查詢課程的視頻資訊
*
* @apiParam (Path) {Number} courseId 課程ID
* @apiParam (Query) {Integer} [page=1]
* @apiParam (Query) {Integer} [limit=20]
* @apiParam (Query) {String} [name] 視頻名稱
* @apiParam (Query) {Date} [start_at] 上傳開始時間
* @apiParam (Query) {Date} [end_at] 上傳結束時間
*
* @apiSuccess {String} cover_url 視頻封面資訊
* @apiSuccess {String} name 視頻姓名
* @apiSuccess {String} length 檔案大小
* @apiSuccess {String} createdAt 上傳時間
* @apiSuccessExample {json} 成功
* {"code":200,"data":{"data":[{"id":50000,"owner_id":1,"owner_name":"","file_id":"5285890787095402127","name":"spider-man","cover_url":...,"complete":1,"op_cnt":0,"createdAt":"2019-06-26T11:48:18.329Z","updatedAt":"2019-07-03T08:24:56.631Z"}],"paging":{"page":1,"pageSize":20,"total":1}},"msg":""}
*/- DB表檔案:
- 參考專案:kanjia, openedv-server
README模版
# demo
#### 介紹
這是一個測驗專案
#### 軟體架構
軟體架構說明
#### 安裝教程
1. xxxx
2. xxxx
3. xxxx
#### 使用說明
1. xxxx
2. xxxx
3. xxxx
#### 其他
1. xxxx
2. xxxx
3. xxxx
- 開發流程規范
- TDD開發(測驗驅動開發):
- 優點:模塊化、高內聚、低耦合、高效率
- 介紹:先寫測驗用例,再寫代碼
- 原則:FAIR,快速(fast),自動化(automated),獨立(isolated),和可重復(repeatable),
- 編碼流程:
- 梳理需求
- 列出功能
- 寫測驗用例
- 正向測驗:當前置條件滿足時,驗證代碼的結果確實符合預期,
- 反向測驗:當前置條件或者輸入不符合要求時,代碼能夠優雅地進行處理,
- 例外測驗:代碼在應該拋出例外的地方正確地拋出了例外,
- 撰寫代碼
- 通過測驗
- 提交
- TDD開發(測驗驅動開發):
1.6 知識沉淀
- 代碼片段
- egg插件
- 如何開發egg插件
- npm包
- 如何開發npm包
2. 如何部署?
2.1 使用公司公有服務器部署
- 參考:
2.2 使用客戶私有服務器部署
2.2.1 容器服務(k8s)
- 開動客戶服務器的容器服務
- jenkins自動打包上傳打包鏡像
# 登陸鏡像倉庫
$ docker login -u user -p pw ccr.ccs.tencentyun.com
# 打包鏡像
$ docker build -t ccr.ccs.tencentyun.com/yhsd/***:xxxx .
# 上傳鏡像
$ docker push ccr.ccs.tencentyun.com/yhsd/***:xxxx
# 洗掉本地鏡像
$ docker rmi ccr.ccs.tencentyun.com/yhsd/***:xxxx
- 新建服務和ingress啟動服務
- 資料庫密碼等敏感資訊可以使用環境變數的當時存放
- 服務訪問方式使用
僅在集群內訪問

- 域名決議到ingress的vip地址上
- 設定觸發器可以達到自動CICD的效果
2.2.2 ubuntu/centos系統pm2部署
- jenkins部署CICD流程
- pm2設定程式開機啟動
2.2.3 windows系統pm2部署
- 自建windows服務器如何部署egg應用
3. 如何運維?
3.1 APM監控
- alinode
- alinode監控koa程式
- alinode監控egg程式
3.2 日志收集
3.3 云推薦設定
- 資料庫備份
- 余額提醒
- 自動續費
4. 需求梳理和報價
5. 驗收報告
5.1 性能測驗報告
- JMeter-自動生成測驗報告
- windows圖文說明Jmeter安裝
5.2 安全測驗報告
5. 推薦閱讀
- 《代碼整潔之道》
- 《重構2》:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63562.html
標籤:其他
