env-aligner - npm 套件製作
先簡介一下這個套件好了,這是一個我自己和一位前端前輩一起開發的環境變數檢查套件,主要是用來檢查 .env
跟 .env.example
這兩個檔案的環境變數是否有對齊,這樣可以避免在開發或是部署時因為環墋變數對不齊而造成問題。
會做這個套件其實起因是公司需要一個工具可以在前端自己開發、build 或是 CI/CD pipeline 時可以檢查環境變數是否有齊全,沒有齊全的話就噴個錯誤並把流程終止,然後希望這個工具可以在不同專案中使用。
於是我寫了一個腳本,後來主管問我,那如果把這個腳本塞進套件裡,它裡面抓檔案路徑的函式能不能正常運作,我想了一下,好問題耶!
轉個念一想,不如我做個套件試試看好了 (我自己也不敢直接玩公司的套件 😅),於是就開始人生初次開發 npm 套件的旅程,中間也邀請了我前端啟蒙的前輩進來幫我把關測試。
然後小小閒聊一下,其實 npm 已經有類似的套件存在,只是在我測試下實在不符合我要的需求,所以就自己開發了一個。
這篇會含括 env-aligner
的功能介紹以及如何發布套件。
env-aligner
功能介紹
它會檢查三種情境:
.env
跟.env.example
比對後如果有缺少的環境變數就會報錯並終止流程.env.example
的變數如果有值,但是.env
沒有設定值,也會報錯並終止流程 3...env
如果有變數是.env.example
沒有的,會報錯 (但不會終止流程)
因為考量到這是個 public 套件,我們開發時將其設計成可以自訂檔案路徑、env 檔案名稱、env schema 檔案名稱、三項檢查的開關,這樣可以讓使用者在不同專案中獲 得最大限度的彈性。(比如有人就用 .env.local
之類的)
總而言之,要用就要先安裝:
npm install env-aligner
程式中引入
最基本的使用就是不傳任何參數,這樣會使用預設的檔案路徑 (process.cwd()
)、檔案名稱 (.env
)、schema 檔案名稱 (.env.example
)、三項檢查都開啟的設定:
const envAligner = require('env-aligner')
envAligner()
其他支援客製化的參數如下:
rootDir
: 一個字串,代表你要檢查的根目錄路徑。預設是process.cwd()
。fileNames
: 一個物件,裡面包含了檔案名稱的設定。裡面可以傳兩個參數:schemaName
: schema 檔案名稱。預設是.env.example
。envName
: env 檔案名稱。預設是.env
。
checkOptions
: 一個物件,裡面包含了三項檢查的設定。裡面可以傳三個參數:isCheckMissing
: 檢查缺少的變數。預設是true
。isCheckEmptyValue
: 檢查空值的變數。預設是true
。isCheckExtra
: 檢查多餘的變數。預設是true
。
const customRootDir = '/application/frontend'
const customFileNames = {
schemaName: '.env.sample',
envName: '.env.local'
}
const customCheckOptions = {
isCheckExtra: false
}
envAligner({ rootDir: customRootDir, fileNames: customFileNames, checkOptions: customCheckOptions })
// or you can only pass a parameter by this way
envAligner({fileNames: fileNames})
CLI 指令
我們也提供了 CLI 指令,可以在終端機中直接執行:
npx env-aligner
跟程式中引入一樣,CLI 指令也支援客製化參數:
Option | Description | Default |
---|---|---|
-s, --schema | schema 檔案名稱 | .env.example |
-e, --env | env 檔案名稱 | .env |
-m, --missing | 檢查缺少的變數 | true |
-n, --empty | 檢查空值的變數 | true |
-x, --extra | 檢查多餘的變數 | false |
# Check the specified .env.sample and .env.local
npx env-aligner -s .env.sample -e .env.local
# Check the specified .env.example and default .env
npx env-aligner -s .env.example
# Do not check missing, empty value, and extra
npx env-aligner -m false -n false -x false
發布套件
其實發布套件比想像中更簡單,我是看著 PJ 老師的部落格一步一步發布的,氮這裡沒做到自動化啦,因為這玩意兒應該不會有很多更新~
然後在開始前,可以先去 npm 註冊一個帳號,然後在終端機中登入:
npm login