在公司實習時遇到了一個問題,我們會用i18n來去做網站的中英文轉換,我們並且會寫一份json來管理我們所有的key,但會遇到一個問題就是說如果一個key在英文有定義,但是在中文沒有定義的話,他不會有自動檢查報錯的功能,導致我們沒有辦法在commit的時候知道key鍵有缺失,思來想去可以用兩個方法來做
因為公司的前端是使用TypeScript,所以我的Plugins也是使用TypeScript,
接下來會教大家如何建立一個基本的TypeScript Eslint Plugins
mkdir eslint-plugin-my-rule
cd eslint-plugin-my-rule
npm init
{
"name": "eslint-plugin-my-rule",
...
npm i -D @types/eslint @types/node tsup typescript
我們會把檔案分成src跟dist,dist為我們之後typescript轉換之後存放的位置
接著在Package.json中加入如下,main為插件的加載點,files為指定發布套件後要放入的的檔案或是目錄,
{
"name": "eslint-plugin-my-rule",
"main": "./dist/index.js",
"files": [
"dist/**"
],
...
module.exports = {
rules: {
// our rules will go here
},
};
import { Rule } from "eslint";
export const myRule: Rule.RuleModule {
create(context){
return {};
}
}
import { myRule } from './myRule';
module.exports = {
rules: {
'my-rule': myRule,
},
};
"scripts": {
"build": "tsup src/index.ts --no-splitting --minify"
},
npm run build
就可以在dist生成我們要的程式碼了
接著你只需要在本地安裝他或是用npm publish把他發佈出去,就可以使用了
// 上傳
npm i eslint-plugin-my-rule
// 本地
npm i ./path-to-your-plugin/eslint-plugin-my-rule
{
"plugins": ["my-rule"], //package name為eslint-plugin-my-rule這邊只需要寫my-rule
"rules": {
"my-rule/my-rule": "warn" // my-rule/index.ts內的rule name
}
...
在寫Rule時很重要的東西是context這個物件,也就是當我們檢查出問題時,我們要如何去顯示錯誤,跟錯誤的行數列數等等
在Eslint的官網有詳細教學,可以去看看
這邊我們只介紹最常用的context.report,格式如下
context.report({
message: "Error is Found!",
loc: {
start: { line: -1, column: -1},
end: { line: -1, column: -1},
}
})
message是你會在Eslint檢查上看到的message,start跟end就是你可以指定錯誤發生的行列數
最後如果想看更詳細的,可以參考官網,有非常詳細的教學
參考資料:
關於我: