Projen 初探 – 打造 CDK 的利器

POSTED BY   Chris
2021 年 5 月 3 日
Projen 初探 – 打造 CDK 的利器
圖片來源: https://github.com/projen/projen/blob/main/logo/projen.svg

在開發程式時,不管開發何種程式語言,第一件事就是要配置開發環境,有些程式語言的框架會提供 scaffold 來下簡單的 cli 指令後,就能自動建立專案該有最基本的設定檔、專案結構目錄、檔案等,那 porjen 最不一樣的,就是它並非一次性 (one-off) 的自動生成代碼工具,相反的,經由編輯同一支檔案 (.projenrc.js) 來反覆不斷產生所需要的代碼,減少開發者自行管理各種設定檔的負擔

 

以開發 Typescript CDK 使用為例,列出幾個優點和小缺點

優點

  • 在不用做任何設定,在 npx projen new awscdk-construct(or awscdk-app-ts) 後,立即享有基本配置好的 package.json、tsconfig、.eslintrc.json、.gitignore、.npmignore 等…,非常方便,當然要修改這些檔案,都是統一修改 .projenrc.js

  • 統一相關 CDK 套件版本,因為 CDK 各套件的版本需一致,deploy 時才不會有問題,所以需要哪些 CDK 套件,一樣統一在 .projenrc.js 中設定,再指定版本後,只要下 npx projen 後,自動安裝搞定

  • 自動生成相關 GitHub Action 檔案,例如拉 PR 時,會自動跑 build.yml 來跑 CI 流程,在 awscdk-construct 類型,則有 release.yml 可以跑自動發佈到 npm or pipy,非常方便

缺點

  • 文件上的細節說明比較少,如果需要比較客製化的需求,建議從 vscode 中的 triggerSuggest 來看參數說明,例如 eslint 如果要自訂自己要的格式,就要用 project.eslint.addRules 方式來自行新增,像我自己本身不喜歡 function 最後一個參數還有一個逗點,可參考 這裡 的設定

  • 目錄結構與原生 CDK 結構不同,若是從原有 CDK 轉移到 projen ,則需要自行轉換處理

 

缺點算是瑕不掩瑜,已經大大減少開發者的負擔,尤其像我自己之前沒用 projen 時,每開一個新專案,就要從舊專案 copy 一堆 TypeScript 相關設定檔,實在很麻煩,有了 projen,這些雜事都不用處理,實在很方便

 

從舊有 CDK 專案轉移到 projen

大概的步驟如下

  1. 先把 package.json 改個名稱,如 package.json.bak,再把 node_modules、package-lock.json、yarn.lock 這些移除

  2. 若是開發 CDK Construct,就下 npx projen new awscdk-construct

  3. 參考剛才保存的 package.json.bak 有用到的套件,區分成 CDK 套件和其餘套件, CDK 套件就放在 cdkDependencies,其餘的放在 deps or devDeps, cdkVersion 可以指定一下,若是開發 Stack 相要指定 CDK 版本,則 cdkVersionPinning 記得設定成 true

  4. 把原先 bin 和 lib 下的 ts 檔,移到 src 目錄下,這地方可自行調配,看是要放到 main.ts 中,還是要再拆檔案,npx projen build 後,會把 compile 後的檔案,全部放到 lib/ 中

  5. 編輯好後下 npx projen,就會自動安裝 CDK 相關套件,且版本是統一的,相關 eslint 和 tsconfig 也都設定好了,相當愉快啊

  6. 看一下生成的 package.json 確定沒問題後,可以把一開始的 package.json.bak 移掉了

 

參考資源

歡迎留言
2

您可能也想看

AWS VPC Endpoint 使用場景
2022 年 3 月 14 日
AWS, CDK, Network
CDK 指定 Physical names 運作方式
2021 年 12 月 4 日
AWS, CDK, Cloudformation
CDK Pipelines – 專為 CDK 打造的 CI/CD 利器
2021 年 11 月 7 日
AWS, CDK, DevOps, CI/CD