vscode commitlint(debug npm scripts)

程式設計師大白發表於2018-11-18

最近在使用commitlint校驗提交git提交日誌的時候遇到點奇怪的問題,在這裡記錄下解決方案。

windows下使用預設命令“commitlint -e $GIT_PARAMS”校驗會報“GIT_PARAMS is not available globally”

這個問題的原因是windows的環境變數中沒有“GIT_PARAMS”,我換成windows下的環境變數形式“%GIT_PARAMS%”還是會報同樣的錯誤,應該是windows下的git或許根本就沒把當前提交的日誌資訊放入%GIT_PARAMS%。繼續google,發現了在.git目錄下有個COMMIT_EDITMSG檔案,開啟一看這個檔案儲存了最近一次提交的日誌資訊,於是把“commitlint -e $GIT_PARAMS”改為“commitlint -e .git/COMMIT_EDITMSG”,問題解決,這種寫法在windows和mac上都支援。

commitlint校驗失敗(type cannot be empty,message cannot be empty)

上面這個問題奇怪的地方就在於我明明寫了type和message的,google一番毫無結果之後我決定自己除錯下“commitlint -e $GIT_PARAMS”到底是怎麼校驗提交資訊的。於是按照vscode官方文件新增“Launch via NPM”如下:(關於vscode如何除錯的基礎資訊請自行參考vscode debugging)

// launch.json
{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Launch via NPM",
            "runtimeExecutable": "npm",
            "runtimeArgs": [
                "run-script",
                "debug"
            ],
            "port": 9229
        }
    ]
}
複製程式碼

然後在專案的package.json新增debug指令碼

"scripts": {
    "debug": "commitlint -e .git/COMMIT_EDITMSG"
},
複製程式碼

然後在commitlint原始碼上打上斷點,f5啟動除錯,納尼,沒啟動就直接退出了,什麼情況。繼續google,發現用node除錯單檔案需要新增--inspect引數,或者是--inspect-brk=port(port用來指定埠號)。這樣就簡單了,在node_modules的.bin目錄下找到commitlint.cmd檔案,進而找到commitlint的入口js檔案,找到之後將npm scripts修改如下

"scripts": {
    "debug":"node --nolazy --inspect-brk=9229 ./node_modules/@commitlint/cli/lib/cli.js -e .git/COMMIT_EDITMSG",
}
複製程式碼

然後在cli.js中打上斷點,f5啟動除錯就行了。

經過除錯發現檢驗失敗是因為commitlint的匹配正則沒考慮到一些特殊字元,導致無法匹配,commitlint的匹配正則如下,可以看到中間部分並沒有包含所有字元,而我的提交資訊裡面恰恰用了一個“@”字元,可以說非常尷尬了。

^(\w*)(?:\(([\w$.\-* ]*)\))?: (.*)$
複製程式碼

相關文章