[{"data":1,"prerenderedAt":1097},["ShallowReactive",2],{"blog:\u002Fblog\u002Fnodejs\u002Feslint":3},{"id":4,"title":5,"author":6,"body":7,"category":1080,"date":1081,"description":1082,"draft":1083,"extension":1084,"image":1085,"meta":1086,"navigation":333,"path":1087,"seo":1088,"series":1085,"seriesOrder":1085,"seriesTitle":1085,"stem":1089,"tags":1090,"updatedAt":1085,"__hash__":1096},"blog\u002Fblog\u002Fnodejs\u002Feslint\u002Findex.md","ESLint - 讓你提前修復潛在錯誤，並維持一致的程式碼風格","charles",{"type":8,"value":9,"toc":1071},"minimark",[10,15,19,22,25,28,31,58,62,72,77,103,106,116,154,166,249,252,256,259,268,273,276,279,282,303,306,317,407,410,413,416,1067],[11,12,14],"h2",{"id":13},"認識-eslint","認識 ESLint",[16,17,18],"p",{},"ESLint 是一種 Linter 工具，主要用於檢查 JavaScript 和 TypeScript 程式碼中的語法錯誤和程式碼風格問題。它能夠幫助開發者維持一致的程式碼風格，並在開發過程中及早發現潛在的錯誤。",[16,20,21],{},"在 Vue 或是 Nuxt 等等的專案中，我們可以使用 ESLint 來檢查程式碼風格，有助於在設計程式邏輯時提早注意潛在問題，避免潛在的錯誤被忽略，造成日後專案莫名的 bug 無從分析。也讓團隊成員在撰寫程式碼時能夠維持一致的風格，讓程式碼更易於閱讀和維護。",[11,23,24],{"id":24},"相容性問題",[16,26,27],{},"在 ESLint 9.x 版本之後，ESLint 的設定檔已經扁平化，避免了之前版本中多層級設定檔的複雜性。但也讓一些舊版的設定檔無法直接使用，對於新手入門在閱讀官方文檔與爬文時，可能會遇到一些困難。這篇文章將帶你快速配置新版 ESLint 9.x 的扁平化設定檔，包含格式化與自定義檢測規範。",[11,29,30],{"id":30},"準備環境",[32,33,34,48],"ul",{},[35,36,37,38],"li",{},"Node.js v18.18.0 或以上版本\n",[39,40,41],"blockquote",{},[16,42,43],{},[44,45,47],"a",{"href":46},"\u002Fblog\u002Fnodejs\u002Fnvm","🔗 參考文章",[35,49,50,51],{},"pnpm 或其他套件管理工具\n",[39,52,53],{},[16,54,55],{},[44,56,47],{"href":57},"\u002Fblog\u002Fnodejs\u002Fpackage-manager",[11,59,61],{"id":60},"安裝-eslint","安裝 ESLint",[16,63,64,65,71],{},"以下以 Vue 專案為例，使用 pnpm 安裝 ESLint。\n並且透過 ",[44,66,70],{"href":67,"rel":68},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Feslint-config",[69],"nofollow","🔗 GitHub - antfu\u002Feslint-config"," 這個套件來快速配置 ESLint。",[32,73,74],{},[35,75,76],{},"執行以下指令安裝 ESLint 與準備好的設定檔",[78,79,84],"pre",{"className":80,"code":81,"language":82,"meta":83,"style":83},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","pnpm dlx @antfu\u002Feslint-config@latest\n","bash","",[85,86,87],"code",{"__ignoreMap":83},[88,89,92,96,100],"span",{"class":90,"line":91},"line",1,[88,93,95],{"class":94},"sbgvK","pnpm",[88,97,99],{"class":98},"s_sjI"," dlx",[88,101,102],{"class":98}," @antfu\u002Feslint-config@latest\n",[16,104,105],{},"如果專案沒有初始化 git 或是還有未 commit 的變動，會出現以下提示：",[39,107,108],{},[16,109,110,115],{},[111,112],"img",{"alt":113,"src":114},"alt text","\u002Fimages\u002Fblog\u002Fnodejs\u002Feslint\u002Fimage.png","\n透過方向鍵選擇 yes 並按 Enter 執行即可",[32,117,118,129,140,151],{},[35,119,120,121],{},"選擇你的專案框架類型",[39,122,123],{},[16,124,125,128],{},[111,126],{"alt":113,"src":127},"\u002Fimages\u002Fblog\u002Fnodejs\u002Feslint\u002Fimage-1.png","\n此處我們用空白鍵選 Vue，若為 Nuxt 框架一樣可以選擇 Vue。",[35,130,131,132],{},"選擇是否需要額外的 utils",[39,133,134],{},[16,135,136,139],{},[111,137],{"alt":113,"src":138},"\u002Fimages\u002Fblog\u002Fnodejs\u002Feslint\u002Fimage-2.png","\n若有需要可以選取，此處我們不選擇，直接按 Enter 繼續即可。",[35,141,142,143],{},"自動更新 vscode 的設定檔",[39,144,145],{},[16,146,147,150],{},[111,148],{"alt":113,"src":149},"\u002Fimages\u002Fblog\u002Fnodejs\u002Feslint\u002Fimage-3.png","\n建議選 yes，這只會影響到當前專案的 VS Code 設定檔，不會影響到全域設定。",[35,152,153],{},"安裝依賴套件",[78,155,157],{"className":80,"code":156,"language":82,"meta":83,"style":83},"pnpm install\n",[85,158,159],{"__ignoreMap":83},[88,160,161,163],{"class":90,"line":91},[88,162,95],{"class":94},[88,164,165],{"class":98}," install\n",[32,167,168],{},[35,169,170,171,186],{},"package.json 加入 script\n",[32,172,173,180],{},[35,174,175,176,179],{},"透過 ",[85,177,178],{},"pnpm lint"," 執行檢查程式碼",[35,181,175,182,185],{},[85,183,184],{},"pnpm lint:fix"," 檢查後嘗試自動修復程式碼中的問題",[78,187,194],{"className":188,"code":189,"highlights":190,"language":193,"meta":83,"style":83},"language-javascript:line-numbers shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \u002F\u002F ...\n  \"scripts\": {\n    \u002F\u002F ...\n    \"lint\": \"eslint .\",\n    \"lint:fix\": \"eslint . --fix\"\n  }\n  \u002F\u002F ...\n}\n",[191,192],5,6,"javascript:line-numbers",[85,195,196,201,207,213,219,226,232,238,243],{"__ignoreMap":83},[88,197,198],{"class":90,"line":91},[88,199,200],{},"{\n",[88,202,204],{"class":90,"line":203},2,[88,205,206],{},"  \u002F\u002F ...\n",[88,208,210],{"class":90,"line":209},3,[88,211,212],{},"  \"scripts\": {\n",[88,214,216],{"class":90,"line":215},4,[88,217,218],{},"    \u002F\u002F ...\n",[88,220,223],{"class":221,"line":191},[90,222],"highlight",[88,224,225],{},"    \"lint\": \"eslint .\",\n",[88,227,229],{"class":228,"line":192},[90,222],[88,230,231],{},"    \"lint:fix\": \"eslint . --fix\"\n",[88,233,235],{"class":90,"line":234},7,[88,236,237],{},"  }\n",[88,239,241],{"class":90,"line":240},8,[88,242,206],{},[88,244,246],{"class":90,"line":245},9,[88,247,248],{},"}\n",[16,250,251],{},"這樣就完成了 ESLint 的安裝與基本配置。",[11,253,255],{"id":254},"安裝-vs-code-擴充套件","安裝 VS Code 擴充套件",[16,257,258],{},"為了在 VS Code 中更好地使用 ESLint，我們需要安裝相關的擴充套件。",[39,260,261],{},[16,262,263],{},[44,264,267],{"href":265,"rel":266},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=dbaeumer.vscode-eslint",[69],"🔗 ESLint",[16,269,270],{},[111,271],{"alt":113,"src":272},"\u002Fimages\u002Fblog\u002Fnodejs\u002Feslint\u002Fimage-4.png",[11,274,275],{"id":275},"自定義規則",[16,277,278],{},"接下來，我們可以根據專案需求，自定義 ESLint 的檢查規則。",[16,280,281],{},"以下是一些常見的自定義規則範例：",[32,283,284,291,297],{},[35,285,286,290],{},[287,288,289],"strong",{},"禁止使用 var","：強制使用 let 或 const 取代 var。",[35,292,293,296],{},[287,294,295],{},"強制使用單引號","：要求使用單引號而非雙引號。",[35,298,299,302],{},[287,300,301],{},"檢查未使用的變數","：報告未使用的變數以保持程式碼整潔。",[16,304,305],{},"由於 antfu 的 ESLint 設定檔已經包含了許多常用的規則，我們可以先使用這些預設規則，然後再根據專案開發過程遇到 ESLint 的警告或錯誤，逐步調整和添加自定義規則。",[16,307,308,309,312,313,316],{},"若要自定義規則，只需要打開稍早自動建立的 ",[85,310,311],{},"eslint.config.js"," 檔案，並在 ",[85,314,315],{},"rules"," 區塊中添加或修改規則即可。例如：",[78,318,322],{"className":188,"code":319,"highlights":320,"language":193,"meta":83,"style":83},"import antfu from '@antfu\u002Feslint-config'\n\nexport default antfu({\n  vue: true,\n  typescript: true, \u002F\u002F 若為 JS 專案沒用到 TS，則不必加這行\n\n  rules: {\n    'no-var': 'error', \u002F\u002F 禁止使用 var\n    'quotes': ['error', 'single'], \u002F\u002F 強制使用單引號\n    'no-unused-vars': 'warn', \u002F\u002F 檢查未使用的變數\n    \u002F\u002F 可以在此添加更多自定義規則\n  },\n})\n",[191,192,234,240,245,321],10,[85,323,324,329,335,340,345,351,356,362,371,380,389,395,401],{"__ignoreMap":83},[88,325,326],{"class":90,"line":91},[88,327,328],{},"import antfu from '@antfu\u002Feslint-config'\n",[88,330,331],{"class":90,"line":203},[88,332,334],{"emptyLinePlaceholder":333},true,"\n",[88,336,337],{"class":90,"line":209},[88,338,339],{},"export default antfu({\n",[88,341,342],{"class":90,"line":215},[88,343,344],{},"  vue: true,\n",[88,346,348],{"class":347,"line":191},[90,222],[88,349,350],{},"  typescript: true, \u002F\u002F 若為 JS 專案沒用到 TS，則不必加這行\n",[88,352,354],{"class":353,"line":192},[90,222],[88,355,334],{"emptyLinePlaceholder":333},[88,357,359],{"class":358,"line":234},[90,222],[88,360,361],{},"  rules: {\n",[88,363,365,368],{"class":364,"line":240},[90,222],[88,366,367],{},"    'no-var': 'error',",[88,369,370],{}," \u002F\u002F 禁止使用 var\n",[88,372,374,377],{"class":373,"line":245},[90,222],[88,375,376],{},"    'quotes': ['error', 'single'],",[88,378,379],{}," \u002F\u002F 強制使用單引號\n",[88,381,383,386],{"class":382,"line":321},[90,222],[88,384,385],{},"    'no-unused-vars': 'warn',",[88,387,388],{}," \u002F\u002F 檢查未使用的變數\n",[88,390,392],{"class":90,"line":391},11,[88,393,394],{},"    \u002F\u002F 可以在此添加更多自定義規則\n",[88,396,398],{"class":90,"line":397},12,[88,399,400],{},"  },\n",[88,402,404],{"class":90,"line":403},13,[88,405,406],{},"})\n",[16,408,409],{},"這樣就可以根據專案需求，自定義 ESLint 的檢查規則了。",[11,411,412],{"id":412},"補充",[16,414,415],{},"以下是我習慣的 VS Code 設定檔，包含了 ESLint 與 Prettier 的整合，讓程式碼格式化與檢查更為一致。",[78,417,421],{"className":418,"code":419,"language":420,"meta":83,"style":83},"language-js shiki shiki-themes material-theme-lighter github-light github-dark","import antfu from \"@antfu\u002Feslint-config\";\n\nexport default antfu({\n  vue: true,\n  typescript: true,\n\n  ignores: [\"**\u002F*.md\"],\n\n  rules: {\n    \"@stylistic\u002Fsemi\": [\"error\", \"always\"],\n    \"@stylistic\u002Fmember-delimiter-style\": [\n      \"error\",\n      {\n        multiline: {\n          delimiter: \"semi\",\n          requireLast: true,\n        },\n        singleline: {\n          delimiter: \"semi\",\n          requireLast: false,\n        },\n      },\n    ],\n    \"no-useless-escape\": \"off\",\n    camelcase: \"error\",\n    \"vue\u002Feqeqeq\": \"error\",\n    \"no-await-in-loop\": \"error\",\n    \"require-atomic-updates\": \"error\",\n    \"max-nested-callbacks\": [\"warn\", 3],\n    \"no-return-await\": \"error\",\n    \"vue\u002Fsingleline-html-element-content-newline\": \"off\",\n    \"vue\u002Frequire-component-is\": \"off\",\n    \"vue\u002Fmax-attributes-per-line\": [\n      \"error\",\n      {\n        singleline: {\n          max: 1,\n        },\n        multiline: {\n          max: 1,\n        },\n      },\n    ],\n    \"style\u002Findent\": \"off\",\n    \"vue\u002Fscript-indent\": [\"error\", 2, { baseIndent: 1 }],\n  },\n});\n","js",[85,422,423,450,454,471,487,498,502,524,528,538,574,588,599,604,614,631,643,649,659,674,686,691,697,705,726,742,762,782,802,833,853,873,893,907,918,923,932,945,950,959,970,975,980,987,1007,1051,1056],{"__ignoreMap":83},[88,424,425,429,433,436,440,443,446],{"class":90,"line":91},[88,426,428],{"class":427},"sVHd0","import",[88,430,432],{"class":431},"su5hD"," antfu ",[88,434,435],{"class":427},"from",[88,437,439],{"class":438},"sjJ54"," \"",[88,441,442],{"class":98},"@antfu\u002Feslint-config",[88,444,445],{"class":438},"\"",[88,447,449],{"class":448},"sP7_E",";\n",[88,451,452],{"class":90,"line":203},[88,453,334],{"emptyLinePlaceholder":333},[88,455,456,459,462,466,469],{"class":90,"line":209},[88,457,458],{"class":427},"export",[88,460,461],{"class":427}," default",[88,463,465],{"class":464},"sGLFI"," antfu",[88,467,468],{"class":431},"(",[88,470,200],{"class":448},[88,472,473,477,480,484],{"class":90,"line":215},[88,474,476],{"class":475},"skxfh","  vue",[88,478,479],{"class":448},":",[88,481,483],{"class":482},"syTEX"," true",[88,485,486],{"class":448},",\n",[88,488,489,492,494,496],{"class":90,"line":191},[88,490,491],{"class":475},"  typescript",[88,493,479],{"class":448},[88,495,483],{"class":482},[88,497,486],{"class":448},[88,499,500],{"class":90,"line":192},[88,501,334],{"emptyLinePlaceholder":333},[88,503,504,507,509,512,514,517,519,522],{"class":90,"line":234},[88,505,506],{"class":475},"  ignores",[88,508,479],{"class":448},[88,510,511],{"class":431}," [",[88,513,445],{"class":438},[88,515,516],{"class":98},"**\u002F*.md",[88,518,445],{"class":438},[88,520,521],{"class":431},"]",[88,523,486],{"class":448},[88,525,526],{"class":90,"line":240},[88,527,334],{"emptyLinePlaceholder":333},[88,529,530,533,535],{"class":90,"line":245},[88,531,532],{"class":475},"  rules",[88,534,479],{"class":448},[88,536,537],{"class":448}," {\n",[88,539,540,543,547,549,551,553,555,558,560,563,565,568,570,572],{"class":90,"line":321},[88,541,542],{"class":438},"    \"",[88,544,546],{"class":545},"sZUrc","@stylistic\u002Fsemi",[88,548,445],{"class":438},[88,550,479],{"class":448},[88,552,511],{"class":431},[88,554,445],{"class":438},[88,556,557],{"class":98},"error",[88,559,445],{"class":438},[88,561,562],{"class":448},",",[88,564,439],{"class":438},[88,566,567],{"class":98},"always",[88,569,445],{"class":438},[88,571,521],{"class":431},[88,573,486],{"class":448},[88,575,576,578,581,583,585],{"class":90,"line":391},[88,577,542],{"class":438},[88,579,580],{"class":545},"@stylistic\u002Fmember-delimiter-style",[88,582,445],{"class":438},[88,584,479],{"class":448},[88,586,587],{"class":431}," [\n",[88,589,590,593,595,597],{"class":90,"line":397},[88,591,592],{"class":438},"      \"",[88,594,557],{"class":98},[88,596,445],{"class":438},[88,598,486],{"class":448},[88,600,601],{"class":90,"line":403},[88,602,603],{"class":448},"      {\n",[88,605,607,610,612],{"class":90,"line":606},14,[88,608,609],{"class":475},"        multiline",[88,611,479],{"class":448},[88,613,537],{"class":448},[88,615,617,620,622,624,627,629],{"class":90,"line":616},15,[88,618,619],{"class":475},"          delimiter",[88,621,479],{"class":448},[88,623,439],{"class":438},[88,625,626],{"class":98},"semi",[88,628,445],{"class":438},[88,630,486],{"class":448},[88,632,634,637,639,641],{"class":90,"line":633},16,[88,635,636],{"class":475},"          requireLast",[88,638,479],{"class":448},[88,640,483],{"class":482},[88,642,486],{"class":448},[88,644,646],{"class":90,"line":645},17,[88,647,648],{"class":448},"        },\n",[88,650,652,655,657],{"class":90,"line":651},18,[88,653,654],{"class":475},"        singleline",[88,656,479],{"class":448},[88,658,537],{"class":448},[88,660,662,664,666,668,670,672],{"class":90,"line":661},19,[88,663,619],{"class":475},[88,665,479],{"class":448},[88,667,439],{"class":438},[88,669,626],{"class":98},[88,671,445],{"class":438},[88,673,486],{"class":448},[88,675,677,679,681,684],{"class":90,"line":676},20,[88,678,636],{"class":475},[88,680,479],{"class":448},[88,682,683],{"class":482}," false",[88,685,486],{"class":448},[88,687,689],{"class":90,"line":688},21,[88,690,648],{"class":448},[88,692,694],{"class":90,"line":693},22,[88,695,696],{"class":448},"      },\n",[88,698,700,703],{"class":90,"line":699},23,[88,701,702],{"class":431},"    ]",[88,704,486],{"class":448},[88,706,708,710,713,715,717,719,722,724],{"class":90,"line":707},24,[88,709,542],{"class":438},[88,711,712],{"class":545},"no-useless-escape",[88,714,445],{"class":438},[88,716,479],{"class":448},[88,718,439],{"class":438},[88,720,721],{"class":98},"off",[88,723,445],{"class":438},[88,725,486],{"class":448},[88,727,729,732,734,736,738,740],{"class":90,"line":728},25,[88,730,731],{"class":475},"    camelcase",[88,733,479],{"class":448},[88,735,439],{"class":438},[88,737,557],{"class":98},[88,739,445],{"class":438},[88,741,486],{"class":448},[88,743,745,747,750,752,754,756,758,760],{"class":90,"line":744},26,[88,746,542],{"class":438},[88,748,749],{"class":545},"vue\u002Feqeqeq",[88,751,445],{"class":438},[88,753,479],{"class":448},[88,755,439],{"class":438},[88,757,557],{"class":98},[88,759,445],{"class":438},[88,761,486],{"class":448},[88,763,765,767,770,772,774,776,778,780],{"class":90,"line":764},27,[88,766,542],{"class":438},[88,768,769],{"class":545},"no-await-in-loop",[88,771,445],{"class":438},[88,773,479],{"class":448},[88,775,439],{"class":438},[88,777,557],{"class":98},[88,779,445],{"class":438},[88,781,486],{"class":448},[88,783,785,787,790,792,794,796,798,800],{"class":90,"line":784},28,[88,786,542],{"class":438},[88,788,789],{"class":545},"require-atomic-updates",[88,791,445],{"class":438},[88,793,479],{"class":448},[88,795,439],{"class":438},[88,797,557],{"class":98},[88,799,445],{"class":438},[88,801,486],{"class":448},[88,803,805,807,810,812,814,816,818,821,823,825,829,831],{"class":90,"line":804},29,[88,806,542],{"class":438},[88,808,809],{"class":545},"max-nested-callbacks",[88,811,445],{"class":438},[88,813,479],{"class":448},[88,815,511],{"class":431},[88,817,445],{"class":438},[88,819,820],{"class":98},"warn",[88,822,445],{"class":438},[88,824,562],{"class":448},[88,826,828],{"class":827},"srdBf"," 3",[88,830,521],{"class":431},[88,832,486],{"class":448},[88,834,836,838,841,843,845,847,849,851],{"class":90,"line":835},30,[88,837,542],{"class":438},[88,839,840],{"class":545},"no-return-await",[88,842,445],{"class":438},[88,844,479],{"class":448},[88,846,439],{"class":438},[88,848,557],{"class":98},[88,850,445],{"class":438},[88,852,486],{"class":448},[88,854,856,858,861,863,865,867,869,871],{"class":90,"line":855},31,[88,857,542],{"class":438},[88,859,860],{"class":545},"vue\u002Fsingleline-html-element-content-newline",[88,862,445],{"class":438},[88,864,479],{"class":448},[88,866,439],{"class":438},[88,868,721],{"class":98},[88,870,445],{"class":438},[88,872,486],{"class":448},[88,874,876,878,881,883,885,887,889,891],{"class":90,"line":875},32,[88,877,542],{"class":438},[88,879,880],{"class":545},"vue\u002Frequire-component-is",[88,882,445],{"class":438},[88,884,479],{"class":448},[88,886,439],{"class":438},[88,888,721],{"class":98},[88,890,445],{"class":438},[88,892,486],{"class":448},[88,894,896,898,901,903,905],{"class":90,"line":895},33,[88,897,542],{"class":438},[88,899,900],{"class":545},"vue\u002Fmax-attributes-per-line",[88,902,445],{"class":438},[88,904,479],{"class":448},[88,906,587],{"class":431},[88,908,910,912,914,916],{"class":90,"line":909},34,[88,911,592],{"class":438},[88,913,557],{"class":98},[88,915,445],{"class":438},[88,917,486],{"class":448},[88,919,921],{"class":90,"line":920},35,[88,922,603],{"class":448},[88,924,926,928,930],{"class":90,"line":925},36,[88,927,654],{"class":475},[88,929,479],{"class":448},[88,931,537],{"class":448},[88,933,935,938,940,943],{"class":90,"line":934},37,[88,936,937],{"class":475},"          max",[88,939,479],{"class":448},[88,941,942],{"class":827}," 1",[88,944,486],{"class":448},[88,946,948],{"class":90,"line":947},38,[88,949,648],{"class":448},[88,951,953,955,957],{"class":90,"line":952},39,[88,954,609],{"class":475},[88,956,479],{"class":448},[88,958,537],{"class":448},[88,960,962,964,966,968],{"class":90,"line":961},40,[88,963,937],{"class":475},[88,965,479],{"class":448},[88,967,942],{"class":827},[88,969,486],{"class":448},[88,971,973],{"class":90,"line":972},41,[88,974,648],{"class":448},[88,976,978],{"class":90,"line":977},42,[88,979,696],{"class":448},[88,981,983,985],{"class":90,"line":982},43,[88,984,702],{"class":431},[88,986,486],{"class":448},[88,988,990,992,995,997,999,1001,1003,1005],{"class":90,"line":989},44,[88,991,542],{"class":438},[88,993,994],{"class":545},"style\u002Findent",[88,996,445],{"class":438},[88,998,479],{"class":448},[88,1000,439],{"class":438},[88,1002,721],{"class":98},[88,1004,445],{"class":438},[88,1006,486],{"class":448},[88,1008,1010,1012,1015,1017,1019,1021,1023,1025,1027,1029,1032,1034,1037,1040,1042,1044,1047,1049],{"class":90,"line":1009},45,[88,1011,542],{"class":438},[88,1013,1014],{"class":545},"vue\u002Fscript-indent",[88,1016,445],{"class":438},[88,1018,479],{"class":448},[88,1020,511],{"class":431},[88,1022,445],{"class":438},[88,1024,557],{"class":98},[88,1026,445],{"class":438},[88,1028,562],{"class":448},[88,1030,1031],{"class":827}," 2",[88,1033,562],{"class":448},[88,1035,1036],{"class":448}," {",[88,1038,1039],{"class":475}," baseIndent",[88,1041,479],{"class":448},[88,1043,942],{"class":827},[88,1045,1046],{"class":448}," }",[88,1048,521],{"class":431},[88,1050,486],{"class":448},[88,1052,1054],{"class":90,"line":1053},46,[88,1055,400],{"class":448},[88,1057,1059,1062,1065],{"class":90,"line":1058},47,[88,1060,1061],{"class":448},"}",[88,1063,1064],{"class":431},")",[88,1066,449],{"class":448},[1068,1069,1070],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZUrc, html code.shiki .sZUrc{--shiki-light:#E53935;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":83,"searchDepth":209,"depth":209,"links":1072},[1073,1074,1075,1076,1077,1078,1079],{"id":13,"depth":203,"text":14},{"id":24,"depth":203,"text":24},{"id":30,"depth":203,"text":30},{"id":60,"depth":203,"text":61},{"id":254,"depth":203,"text":255},{"id":275,"depth":203,"text":275},{"id":412,"depth":203,"text":412},"Node.js","2025-06-05","這篇文章帶你快速配置新版 ESLint 9.x 的扁平化設定檔，包含格式化與自定義檢測規範。",false,"md",null,{},"\u002Fblog\u002Fnodejs\u002Feslint",{"title":5,"description":1082},"blog\u002Fnodejs\u002Feslint\u002Findex",[1091,1080,1092,1093,1094,1095],"ESLint","Vue.js","Nuxt","JavaScript","TypeScript","mlP_yyDerha5Kv3H6Imq6LBWpahN9iUENUc46DdT5J4",1780512500242]