{"id":31716,"date":"2025-07-12T14:02:54","date_gmt":"2025-07-12T07:02:54","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=31716"},"modified":"2025-07-12T14:05:05","modified_gmt":"2025-07-12T07:05:05","slug":"cong-cu-eslint-trong-javascript","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/","title":{"rendered":"C\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec? L\u1ee3i \u00edch &#038; C\u00e1ch c\u00e0i ESLint trong JavaScript"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Cong-cu-ESLint-la-gi\" >C\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript\" >T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng ESLint trong d\u1ef1 \u00e1n JavaScript?<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Phat-hien-loi-som\" >Ph\u00e1t hi\u1ec7n l\u1ed7i s\u1edbm<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Dam-bao-tinh-nhat-quan-cua-ma-nguon\" >\u0110\u1ea3m b\u1ea3o t\u00ednh nh\u1ea5t qu\u00e1n c\u1ee7a m\u00e3 ngu\u1ed3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Nang-cao-kha-nang-doc-hieu-va-bao-tri-code\" >N\u00e2ng cao kh\u1ea3 n\u0103ng \u0111\u1ecdc hi\u1ec3u v\u00e0 b\u1ea3o tr\u00ec code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Tu-dong-hoa-quy-trinh-kiem-tra-code\" >T\u1ef1 \u0111\u1ed9ng h\u00f3a quy tr\u00ecnh ki\u1ec3m tra code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Hoc-hoi-va-cai-thien-ky-nang\" >H\u1ecdc h\u1ecfi v\u00e0 c\u1ea3i thi\u1ec7n k\u1ef9 n\u0103ng<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Cac-quy-tac-Rules-va-tuy-chinh-trong-ESLint\" >C\u00e1c quy t\u1eafc (Rules) v\u00e0 t\u00f9y ch\u1ec9nh trong ESLint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Cac-cong-cu-va-plugin-ho-tro-ESLint-trong-IDE\" >C\u00e1c c\u00f4ng c\u1ee5 v\u00e0 plugin h\u1ed7 tr\u1ee3 ESLint trong IDE<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#ESLint-voi-cac-framework-va-thu-vien-JavaScript-pho-bien\" >ESLint v\u1edbi c\u00e1c framework v\u00e0 th\u01b0 vi\u1ec7n JavaScript ph\u1ed5 bi\u1ebfn<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#ESLint-cho-ReactJSX\" >ESLint cho React\/JSX<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#ESLint-cho-Vuejs\" >ESLint cho Vue.js<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#ESLint-cho-Nodejs\" >ESLint cho Node.js<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Cach-cai-dat-ESLint-tu-dau-cho-nguoi-moi\" >C\u00e1ch c\u00e0i \u0111\u1eb7t ESLint t\u1eeb \u0111\u1ea7u cho ng\u01b0\u1eddi m\u1edbi<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Buoc-1-Kiem-tra-xem-may-ban-da-co-Nodejs-chua\" >B\u01b0\u1edbc 1: Ki\u1ec3m tra xem m\u00e1y b\u1ea1n \u0111\u00e3 c\u00f3 Node.js ch\u01b0a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Buoc-2-Cai-dat-ESLint-bang-npm\" >B\u01b0\u1edbc 2: C\u00e0i \u0111\u1eb7t ESLint b\u1eb1ng npm<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Buoc-3-Ap-dung-bo-quy-tac-kiem-tra-pho-bien-neu-muon\" >B\u01b0\u1edbc 3: \u00c1p d\u1ee5ng b\u1ed9 quy t\u1eafc ki\u1ec3m tra ph\u1ed5 bi\u1ebfn (n\u1ebfu mu\u1ed1n)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Buoc-4-Tao-file-cau-hinh-ESLint\" >B\u01b0\u1edbc 4: T\u1ea1o file c\u1ea5u h\u00ecnh ESLint<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Buoc-5-Chay-ESLint-de-kiem-tra-code-cua-ban\" >B\u01b0\u1edbc 5: Ch\u1ea1y ESLint \u0111\u1ec3 ki\u1ec3m tra code c\u1ee7a b\u1ea1n<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/interdata.vn\/blog\/cong-cu-eslint-trong-javascript\/#Cach-su-dung-ESLint-de-kiem-tra-toan-bo-du-an\" >C\u00e1ch s\u1eed d\u1ee5ng ESLint \u0111\u1ec3 ki\u1ec3m tra to\u00e0n b\u1ed9 d\u1ef1 \u00e1n<\/a><\/li><\/ul><\/nav><\/div>\n<p>Khi x\u00e2y d\u1ef1ng website v\u00e0 \u1ee9ng d\u1ee5ng, <a href=\"https:\/\/interdata.vn\/blog\/lap-trinh-la-gi\/\">l\u1eadp tr\u00ecnh<\/a> vi\u00ean JavaScript lu\u00f4n \u0111\u1ed1i m\u1eb7t v\u1edbi th\u00e1ch th\u1ee9c l\u1edbn: l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 duy tr\u00ec ch\u1ea5t l\u01b0\u1ee3ng m\u00e3 ngu\u1ed3n cao c\u1ea5p, \u0111\u1eb7c bi\u1ec7t khi l\u00e0m vi\u1ec7c trong c\u00e1c d\u1ef1 \u00e1n l\u1edbn hay theo nh\u00f3m? C\u00f9ng InterData t\u00ecm hi\u1ec3u <strong>c\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec<\/strong>, nh\u1eefng l\u1ee3i \u00edch v\u01b0\u1ee3t tr\u1ed9i m\u00e0 n\u00f3 mang l\u1ea1i, c\u00e1ch c\u00e0i v\u00e0 s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 ESLint \u0111\u1ec3 b\u1ea1n c\u00f3 th\u1ec3 n\u00e2ng cao hi\u1ec7u qu\u1ea3 c\u00f4ng vi\u1ec7c l\u1eadp tr\u00ecnh c\u1ee7a m\u00ecnh.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cong-cu-ESLint-la-gi\"><\/span>C\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>ESLint l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ph\u00e2n t\u00edch m\u00e3 ngu\u1ed3n t\u0129nh m\u00e3 ngu\u1ed3n m\u1edf v\u00e0 c\u1ef1c k\u1ef3 linh ho\u1ea1t d\u00e0nh cho JavaScript<\/strong>. V\u1eady &#8220;ph\u00e2n t\u00edch m\u00e3 ngu\u1ed3n t\u0129nh&#8221; ngh\u0129a l\u00e0 g\u00ec? \u0110\u01a1n gi\u1ea3n, n\u00f3 s\u1ebd ki\u1ec3m tra code c\u1ee7a b\u1ea1n m\u00e0 kh\u00f4ng c\u1ea7n ph\u1ea3i ch\u1ea1y ch\u01b0\u01a1ng tr\u00ecnh.<\/p>\n<p>ESLint r\u00e0 so\u00e1t code c\u1ee7a b\u1ea1n \u0111\u1ec3 t\u00ecm ki\u1ebfm c\u00e1c v\u1ea5n \u0111\u1ec1 v\u1ec1 c\u00fa ph\u00e1p, l\u1ed7i logic ti\u1ec1m \u1ea9n, v\u00e0 \u0111\u1eb7c bi\u1ec7t l\u00e0 s\u1ef1 kh\u00f4ng tu\u00e2n th\u1ee7 c\u00e1c quy t\u1eafc l\u1eadp tr\u00ecnh (coding style\/convention).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cong-cu-ESLint-la-gi.jpg\" alt=\"C\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec\" width=\"800\" height=\"500\" class=\"aligncenter size-full wp-image-31720\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cong-cu-ESLint-la-gi.jpg 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cong-cu-ESLint-la-gi-300x188.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cong-cu-ESLint-la-gi-768x480.jpg 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cong-cu-ESLint-la-gi-750x469.jpg 750w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>M\u1ee5c ti\u00eau ch\u00ednh c\u1ee7a ESLint l\u00e0 gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean <strong>vi\u1ebft code s\u1ea1ch h\u01a1n, nh\u1ea5t qu\u00e1n h\u01a1n v\u00e0 \u00edt l\u1ed7i h\u01a1n<\/strong>. Ra \u0111\u1eddi v\u00e0o n\u0103m 2013, ESLint nhanh ch\u00f3ng tr\u1edf th\u00e0nh c\u00f4ng c\u1ee5 \u0111\u01b0\u1ee3c \u01b0a chu\u1ed9ng b\u1edfi kh\u1ea3 n\u0103ng c\u1ea5u h\u00ecnh m\u1ea1nh m\u1ebd, cho ph\u00e9p b\u1ea1n \u0111i\u1ec1u ch\u1ec9nh t\u1eebng quy t\u1eafc ki\u1ec3m tra \u0111\u1ec3 ph\u00f9 h\u1ee3p v\u1edbi y\u00eau c\u1ea7u c\u1ee7a t\u1eebng d\u1ef1 \u00e1n ho\u1eb7c coding style c\u1ee7a ri\u00eang b\u1ea1n, ho\u1eb7c c\u1ee7a c\u1ea3 nh\u00f3m.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript\"><\/span>T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng ESLint trong d\u1ef1 \u00e1n JavaScript?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vi\u1ec7c t\u00edch h\u1ee3p ESLint v\u00e0o quy tr\u00ecnh ph\u00e1t tri\u1ec3n kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t xu h\u01b0\u1edbng m\u00e0 c\u00f2n l\u00e0 m\u1ed9t b\u01b0\u1edbc \u0111i chi\u1ebfn l\u01b0\u1ee3c \u0111\u1ec3 n\u00e2ng cao ch\u1ea5t l\u01b0\u1ee3ng s\u1ea3n ph\u1ea9m v\u00e0 hi\u1ec7u su\u1ea5t l\u00e0m vi\u1ec7c. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 nh\u1eefng l\u00fd do c\u1ee5 th\u1ec3:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Phat-hien-loi-som\"><\/span>Ph\u00e1t hi\u1ec7n l\u1ed7i s\u1edbm<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>ESLint ho\u1ea1t \u0111\u1ed9ng nh\u01b0 m\u1ed9t &#8220;ng\u01b0\u1eddi gi\u00e1m s\u00e1t&#8221; t\u1ec9 m\u1ec9, n\u00f3 gi\u00fap b\u1ea1n <strong>t\u00ecm ra c\u00e1c l\u1ed7i c\u00fa ph\u00e1p, v\u1ea5n \u0111\u1ec1 v\u1ec1 logic hay c\u00e1c l\u1ed7i ti\u1ec1m \u1ea9n<\/strong> ngay trong qu\u00e1 tr\u00ecnh b\u1ea1n g\u00f5 code, tr\u01b0\u1edbc khi ch\u00fang k\u1ecbp g\u00e2y ra s\u1ef1 c\u1ed1 khi ch\u01b0\u01a1ng tr\u00ecnh ch\u1ea1y.<\/p>\n<p>Ph\u00e1t hi\u1ec7n l\u1ed7i s\u1edbm gi\u00fap ti\u1ebft ki\u1ec7m \u0111\u00e1ng k\u1ec3 th\u1eddi gian g\u1ee1 l\u1ed7i (debugging), m\u1ed9t trong nh\u1eefng c\u00f4ng vi\u1ec7c t\u1ed1n k\u00e9m nh\u1ea5t trong l\u1eadp tr\u00ecnh. T\u01b0\u1edfng t\u01b0\u1ee3ng b\u1ea1n c\u00f3 th\u1ec3 s\u1eeda l\u1ed7i ngay l\u1eadp t\u1ee9c thay v\u00ec ph\u1ea3i m\u1ea5t h\u00e0ng gi\u1edd t\u00ecm ki\u1ebfm trong m\u1ed9t r\u1eebng code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Dam-bao-tinh-nhat-quan-cua-ma-nguon\"><\/span>\u0110\u1ea3m b\u1ea3o t\u00ednh nh\u1ea5t qu\u00e1n c\u1ee7a m\u00e3 ngu\u1ed3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Trong m\u1ed9t d\u1ef1 \u00e1n l\u1edbn ho\u1eb7c khi l\u00e0m vi\u1ec7c nh\u00f3m, m\u1ed7i l\u1eadp tr\u00ecnh vi\u00ean c\u00f3 th\u1ec3 c\u00f3 phong c\u00e1ch vi\u1ebft code ri\u00eang. \u0110i\u1ec1u n\u00e0y d\u1eabn \u0111\u1ebfn s\u1ef1 thi\u1ebfu nh\u1ea5t qu\u00e1n, khi\u1ebfn code kh\u00f3 \u0111\u1ecdc v\u00e0 kh\u00f3 b\u1ea3o tr\u00ec. ESLint cho ph\u00e9p b\u1ea1n <strong>thi\u1ebft l\u1eadp m\u1ed9t b\u1ed9 quy t\u1eafc chung<\/strong> (coding style guide) cho to\u00e0n b\u1ed9 d\u1ef1 \u00e1n.<\/p>\n<p>M\u1ecdi th\u00e0nh vi\u00ean trong nh\u00f3m s\u1ebd <strong>tu\u00e2n th\u1ee7 c\u00f9ng m\u1ed9t chu\u1ea9n<\/strong>, gi\u00fap code tr\u00f4ng nh\u01b0 \u0111\u01b0\u1ee3c vi\u1ebft b\u1edfi m\u1ed9t ng\u01b0\u1eddi duy nh\u1ea5t, t\u0103ng c\u01b0\u1eddng kh\u1ea3 n\u0103ng h\u1ee3p t\u00e1c v\u00e0 b\u1ea3o tr\u00ec.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Nang-cao-kha-nang-doc-hieu-va-bao-tri-code\"><\/span>N\u00e2ng cao kh\u1ea3 n\u0103ng \u0111\u1ecdc hi\u1ec3u v\u00e0 b\u1ea3o tr\u00ec code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Code s\u1ea1ch, nh\u1ea5t qu\u00e1n v\u00e0 \u00edt l\u1ed7i s\u1ebd d\u1ec5 \u0111\u1ecdc v\u00e0 d\u1ec5 hi\u1ec3u h\u01a1n r\u1ea5t nhi\u1ec1u. Khi m\u1ed9t l\u1eadp tr\u00ecnh vi\u00ean m\u1edbi gia nh\u1eadp d\u1ef1 \u00e1n ho\u1eb7c khi b\u1ea1n c\u1ea7n quay l\u1ea1i xem code c\u0169 c\u1ee7a m\u00ecnh, vi\u1ec7c \u0111\u1ecdc v\u00e0 n\u1eafm b\u1eaft logic s\u1ebd nhanh ch\u00f3ng h\u01a1n l\u00e0m tr\u1ef1c ti\u1ebfp \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn chi ph\u00ed b\u1ea3o tr\u00ec ph\u1ea7n m\u1ec1m v\u1ec1 l\u00e2u d\u00e0i.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript.jpg\" alt=\"T\u1ea1i sao n\u00ean s\u1eed d\u1ee5ng ESLint trong d\u1ef1 \u00e1n JavaScript\" width=\"960\" height=\"480\" class=\"aligncenter size-full wp-image-31721\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript.jpg 960w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript-300x150.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript-768x384.jpg 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript-360x180.jpg 360w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Tai-sao-nen-su-dung-ESLint-trong-du-an-JavaScript-750x375.jpg 750w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Tu-dong-hoa-quy-trinh-kiem-tra-code\"><\/span>T\u1ef1 \u0111\u1ed9ng h\u00f3a quy tr\u00ecnh ki\u1ec3m tra code<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>ESLint c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c <strong>t\u00edch h\u1ee3p li\u1ec1n m\u1ea1ch v\u00e0o c\u00e1c h\u1ec7 th\u1ed1ng t\u00edch h\u1ee3p li\u00ean t\u1ee5c<\/strong>\/tri\u1ec3n khai li\u00ean t\u1ee5c (CI\/CD &#8211; Continuous Integration\/Continuous Deployment). \u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 m\u1ed7i khi code m\u1edbi \u0111\u01b0\u1ee3c \u0111\u01b0a l\u00ean h\u1ec7 th\u1ed1ng, ESLint s\u1ebd t\u1ef1 \u0111\u1ed9ng ch\u1ea1y ki\u1ec3m tra.<\/p>\n<p>N\u1ebfu c\u00f3 b\u1ea5t k\u1ef3 vi ph\u1ea1m quy t\u1eafc n\u00e0o, qu\u00e1 tr\u00ecnh tri\u1ec3n khai c\u00f3 th\u1ec3 b\u1ecb d\u1eebng l\u1ea1i, \u0111\u1ea3m b\u1ea3o r\u1eb1ng ch\u1ec9 c\u00f3 m\u00e3 ngu\u1ed3n ch\u1ea5t l\u01b0\u1ee3ng cao m\u1edbi \u0111\u01b0\u1ee3c \u0111\u01b0a v\u00e0o s\u1ea3n ph\u1ea9m cu\u1ed1i c\u00f9ng.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Hoc-hoi-va-cai-thien-ky-nang\"><\/span>H\u1ecdc h\u1ecfi v\u00e0 c\u1ea3i thi\u1ec7n k\u1ef9 n\u0103ng<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0110\u1ed1i v\u1edbi l\u1eadp tr\u00ecnh vi\u00ean m\u1edbi, ESLint l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 h\u1ecdc t\u1eadp tuy\u1ec7t v\u1eddi, n\u00f3 kh\u00f4ng <strong>ch\u1ec9 ch\u1ec9 ra l\u1ed7i<\/strong> m\u00e0 c\u00f2n gi\u1ea3i th\u00edch l\u00fd do t\u1ea1i sao \u0111\u00f3 l\u00e0 m\u1ed9t l\u1ed7i ho\u1eb7c t\u1ea1i sao m\u1ed9t c\u00e1ch vi\u1ebft kh\u00e1c \u0111\u01b0\u1ee3c khuy\u1ebfn ngh\u1ecb.<\/p>\n<p>B\u1eb1ng c\u00e1ch l\u00e0m theo c\u00e1c g\u1ee3i \u00fd c\u1ee7a ESLint, b\u1ea1n s\u1ebd d\u1ea7n h\u1ecdc \u0111\u01b0\u1ee3c c\u00e1c &#8220;best practices&#8221; (th\u1ef1c ti\u1ec5n t\u1ed1t nh\u1ea5t) trong l\u1eadp tr\u00ecnh JavaScript, t\u1eeb \u0111\u00f3 n\u00e2ng cao k\u1ef9 n\u0103ng v\u00e0 t\u01b0 duy vi\u1ebft code chuy\u00ean nghi\u1ec7p.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac-quy-tac-Rules-va-tuy-chinh-trong-ESLint\"><\/span>C\u00e1c quy t\u1eafc (Rules) v\u00e0 t\u00f9y ch\u1ec9nh trong ESLint<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>C\u00e1c <strong>quy t\u1eafc (rules)<\/strong> l\u00e0 tr\u00e1i tim c\u1ee7a ESLint, l\u00e0 nh\u1eefng ch\u1ec9 d\u1eabn c\u1ee5 th\u1ec3 m\u00e0 ESLint d\u00f9ng \u0111\u1ec3 ki\u1ec3m tra m\u00e3 ngu\u1ed3n c\u1ee7a b\u1ea1n, m\u1ed7i rule s\u1ebd t\u1eadp trung v\u00e0o m\u1ed9t kh\u00eda c\u1ea1nh nh\u1ea5t \u0111\u1ecbnh c\u1ee7a code, t\u1eeb vi\u1ec7c s\u1eed d\u1ee5ng bi\u1ebfn, d\u1ea5u ch\u1ea5m ph\u1ea9y, cho \u0111\u1ebfn c\u1ea5u tr\u00fac h\u00e0m.<\/p>\n<p>M\u1ed9t s\u1ed1 quy t\u1eafc ph\u1ed5 bi\u1ebfn m\u00e0 b\u1ea1n th\u01b0\u1eddng g\u1eb7p ho\u1eb7c mu\u1ed1n s\u1eed d\u1ee5ng bao g\u1ed3m:<\/p>\n<ul>\n<li><strong><code>indent<\/code><\/strong>: Quy \u0111\u1ecbnh v\u1ec1 s\u1ed1 l\u01b0\u1ee3ng kho\u1ea3ng tr\u1eafng ho\u1eb7c tab \u0111\u1ec3 th\u1ee5t l\u1ec1 code (v\u00ed d\u1ee5: <code>['error', 2]<\/code> \u0111\u1ec3 b\u1eaft bu\u1ed9c th\u1ee5t l\u1ec1 2 d\u1ea5u c\u00e1ch).<\/li>\n<li><strong><code>quotes<\/code><\/strong>: Y\u00eau c\u1ea7u s\u1eed d\u1ee5ng d\u1ea5u nh\u00e1y \u0111\u01a1n (<code>'<\/code>) hay d\u1ea5u nh\u00e1y k\u00e9p (<code>\"<\/code>) cho chu\u1ed7i (v\u00ed d\u1ee5: <code>['error', 'single']<\/code>).<\/li>\n<li><strong><code>semi<\/code><\/strong>: B\u1eaft bu\u1ed9c ho\u1eb7c c\u1ea5m s\u1eed d\u1ee5ng d\u1ea5u ch\u1ea5m ph\u1ea9y \u1edf cu\u1ed1i c\u00e2u l\u1ec7nh (v\u00ed d\u1ee5: <code>['error', 'always']<\/code>).<\/li>\n<li><strong><code>no-unused-vars<\/code><\/strong>: C\u1ea3nh b\u00e1o ho\u1eb7c b\u00e1o l\u1ed7i khi c\u00f3 bi\u1ebfn \u0111\u01b0\u1ee3c khai b\u00e1o nh\u01b0ng kh\u00f4ng bao gi\u1edd \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng. \u0110i\u1ec1u n\u00e0y gi\u00fap d\u1ecdn d\u1eb9p code kh\u00f4ng c\u1ea7n thi\u1ebft.<\/li>\n<li><strong><code>no-console<\/code><\/strong>: C\u1ea3nh b\u00e1o ho\u1eb7c b\u00e1o l\u1ed7i khi s\u1eed d\u1ee5ng <code>console.log<\/code> (th\u01b0\u1eddng kh\u00f4ng n\u00ean c\u00f3 trong production code).<\/li>\n<li><strong><code>eqeqeq<\/code><\/strong>: Y\u00eau c\u1ea7u s\u1eed d\u1ee5ng to\u00e1n t\u1eed so s\u00e1nh <code>===<\/code> v\u00e0 <code>!==<\/code> thay v\u00ec <code>==<\/code> v\u00e0 <code>!=<\/code> \u0111\u1ec3 tr\u00e1nh c\u00e1c l\u1ed7i so s\u00e1nh ki\u1ec3u d\u1eef li\u1ec7u kh\u00f4ng r\u00f5 r\u00e0ng.<\/li>\n<li><strong><code>curly<\/code><\/strong>: Bu\u1ed9c t\u1ea5t c\u1ea3 c\u00e1c kh\u1ed1i l\u1ec7nh (nh\u01b0 <code>if<\/code>, <code>for<\/code>) ph\u1ea3i c\u00f3 d\u1ea5u ngo\u1eb7c nh\u1ecdn <code>{}<\/code> ngay c\u1ea3 khi ch\u1ec9 c\u00f3 m\u1ed9t c\u00e2u l\u1ec7nh.<\/li>\n<\/ul>\n<p>B\u1ea1n c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng <strong>ghi \u0111\u00e8 (override)<\/strong> ho\u1eb7c <strong>t\u00f9y ch\u1ec9nh<\/strong> c\u00e1c quy t\u1eafc c\u00f3 s\u1eb5n trong ph\u1ea7n <code>rules<\/code> c\u1ee7a file <code>.eslintrc.*<\/code><\/p>\n<p>Ngo\u00e0i ra, ESLint c\u00f2n cho ph\u00e9p b\u1ea1n t\u1ea1o ra <b>custom rules<\/b> (quy t\u1eafc t\u00f9y ch\u1ec9nh) c\u1ee7a ri\u00eang m\u00ecnh. \u0110i\u1ec1u n\u00e0y c\u1ef1c k\u1ef3 h\u1eefu \u00edch khi b\u1ea1n c\u00f3 nh\u1eefng quy t\u1eafc \u0111\u1eb7c th\u00f9 cho d\u1ef1 \u00e1n ho\u1eb7c c\u00f4ng ty m\u00e0 kh\u00f4ng c\u00f3 trong c\u00e1c b\u1ed9 quy t\u1eafc m\u1eb7c \u0111\u1ecbnh.<\/p>\n<p>Vi\u1ec7c t\u1ea1o custom rule \u0111\u00f2i h\u1ecfi ki\u1ebfn th\u1ee9c s\u00e2u h\u01a1n v\u1ec1 c\u00e1ch ESLint ph\u00e2n t\u00edch c\u00fa ph\u00e1p m\u00e3 ngu\u1ed3n (AST &#8211; Abstract Syntax Tree), nh\u01b0ng n\u00f3 mang l\u1ea1i s\u1ef1 linh ho\u1ea1t t\u1ed1i \u0111a.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac-cong-cu-va-plugin-ho-tro-ESLint-trong-IDE\"><\/span>C\u00e1c c\u00f4ng c\u1ee5 v\u00e0 plugin h\u1ed7 tr\u1ee3 ESLint trong IDE<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Vi\u1ec7c t\u00edch h\u1ee3p ESLint tr\u1ef1c ti\u1ebfp v\u00e0o m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n t\u00edch h\u1ee3p (IDE &#8211; Integrated Development Environment) ho\u1eb7c tr\u00ecnh so\u1ea1n th\u1ea3o code (Editor) c\u1ee7a b\u1ea1n s\u1ebd gi\u00fap qu\u00e1 tr\u00ecnh linting di\u1ec5n ra m\u1ed9t c\u00e1ch t\u1ef1 \u0111\u1ed9ng v\u00e0 tr\u1ef1c quan nh\u1ea5t. B\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c ph\u1ea3n h\u1ed3i v\u1ec1 l\u1ed7i v\u00e0 c\u1ea3nh b\u00e1o ngay l\u1eadp t\u1ee9c khi g\u00f5 code, gi\u1ed1ng nh\u01b0 ki\u1ec3m tra ch\u00ednh t\u1ea3 v\u1eady.<\/p>\n<p>\u0110\u1ed1i v\u1edbi c\u00e1c IDE\/Editor ph\u1ed5 bi\u1ebfn:<\/p>\n<ul>\n<li><strong>Visual Studio Code (VS Code):<\/strong> \u0110\u00e2y l\u00e0 m\u1ed9t trong nh\u1eefng editor \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng nhi\u1ec1u nh\u1ea5t, v\u00e0 vi\u1ec7c t\u00edch h\u1ee3p ESLint v\u00f4 c\u00f9ng \u0111\u01a1n gi\u1ea3n. B\u1ea1n ch\u1ec9 c\u1ea7n c\u00e0i \u0111\u1eb7t extension &#8220;ESLint&#8221; t\u1eeb Marketplace c\u1ee7a VS Code. Sau khi c\u00e0i \u0111\u1eb7t, extension n\u00e0y s\u1ebd t\u1ef1 \u0111\u1ed9ng ph\u00e1t hi\u1ec7n file <code>.eslintrc.*<\/code> trong d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n v\u00e0 hi\u1ec3n th\u1ecb l\u1ed7i, c\u1ea3nh b\u00e1o tr\u1ef1c ti\u1ebfp trong c\u1eeda s\u1ed5 editor. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh \u0111\u1ec3 ESLint t\u1ef1 \u0111\u1ed9ng s\u1eeda l\u1ed7i (autofix) khi b\u1ea1n l\u01b0u file.<\/li>\n<li><strong>WebStorm\/IntelliJ IDEA:<\/strong> C\u00e1c IDE c\u1ee7a JetBrains \u0111\u00e3 t\u00edch h\u1ee3p s\u1eb5n ESLint. B\u1ea1n ch\u1ec9 c\u1ea7n b\u1eadt n\u00f3 trong ph\u1ea7n c\u00e0i \u0111\u1eb7t (<code>Preferences\/Settings &gt; Languages &amp; Frameworks &gt; JavaScript &gt; Code Quality Tools &gt; ESLint<\/code>) v\u00e0 ch\u1ec9 \u0111\u1ecbnh \u0111\u01b0\u1eddng d\u1eabn \u0111\u1ebfn ESLint package trong d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n.<\/li>\n<li><strong>Sublime Text, Atom, Vim, Emacs:<\/strong> C\u00e1c editor n\u00e0y c\u0169ng c\u00f3 c\u00e1c plugin ho\u1eb7c package t\u01b0\u01a1ng \u1ee9ng cho ph\u00e9p t\u00edch h\u1ee3p ESLint. B\u1ea1n c\u1ea7n t\u00ecm ki\u1ebfm v\u00e0 c\u00e0i \u0111\u1eb7t plugin ph\u00f9 h\u1ee3p v\u1edbi editor c\u1ee7a m\u00ecnh (v\u00ed d\u1ee5: <code>LSP-eslint<\/code> cho Sublime Text, <code>linter-eslint<\/code> cho Atom).<\/li>\n<\/ul>\n<p>L\u1ee3i \u00edch l\u1edbn nh\u1ea5t c\u1ee7a vi\u1ec7c t\u00edch h\u1ee3p tr\u1ef1c ti\u1ebfp n\u00e0y l\u00e0 kh\u1ea3 n\u0103ng ph\u1ea3n h\u1ed3i t\u1ee9c th\u00ec, b\u1ea1n kh\u00f4ng c\u1ea7n ph\u1ea3i ch\u1ea1y l\u1ec7nh ESLint th\u1ee7 c\u00f4ng sau m\u1ed7i l\u1ea7n thay \u0111\u1ed5i code. M\u1ecdi v\u1ea5n \u0111\u1ec1 s\u1ebd \u0111\u01b0\u1ee3c l\u00e0m n\u1ed5i b\u1eadt ngay l\u1eadp t\u1ee9c, gi\u00fap b\u1ea1n s\u1eeda ch\u1eefa nhanh ch\u00f3ng v\u00e0 duy tr\u00ec lu\u1ed3ng c\u00f4ng vi\u1ec7c li\u00ean t\u1ee5c.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"ESLint-voi-cac-framework-va-thu-vien-JavaScript-pho-bien\"><\/span>ESLint v\u1edbi c\u00e1c framework v\u00e0 th\u01b0 vi\u1ec7n JavaScript ph\u1ed5 bi\u1ebfn<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ESLint kh\u00f4ng ch\u1ec9 d\u1eebng l\u1ea1i \u1edf JavaScript thu\u1ea7n t\u00fay m\u00e0 c\u00f2n c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh \u0111\u1ec3 ho\u1ea1t \u0111\u1ed9ng hi\u1ec7u qu\u1ea3 v\u1edbi c\u00e1c framework v\u00e0 th\u01b0 vi\u1ec7n JavaScript ph\u1ed5 bi\u1ebfn nh\u01b0 React, Vue.js hay m\u00f4i tr\u01b0\u1eddng Node.js. \u0110i\u1ec1u n\u00e0y l\u00e0 nh\u1edd v\u00e0o h\u1ec7 th\u1ed1ng plugin v\u00e0 preset m\u1ea1nh m\u1ebd c\u1ee7a n\u00f3.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"ESLint-cho-ReactJSX\"><\/span>ESLint cho React\/JSX<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Khi l\u00e0m vi\u1ec7c v\u1edbi React, b\u1ea1n s\u1ebd th\u01b0\u1eddng xuy\u00ean s\u1eed d\u1ee5ng JSX (m\u1ed9t ph\u1ea7n m\u1edf r\u1ed9ng c\u00fa ph\u00e1p cho JavaScript). ESLint c\u00f3 c\u00e1c plugin ri\u00eang bi\u1ec7t \u0111\u1ec3 hi\u1ec3u v\u00e0 ki\u1ec3m tra c\u00fa ph\u00e1p JSX.<\/p>\n<p>Plugin <code>eslint-plugin-react<\/code> l\u00e0 m\u1ed9t v\u00ed d\u1ee5 \u0111i\u1ec3n h\u00ecnh, n\u00f3 cung c\u1ea5p c\u00e1c quy t\u1eafc c\u1ee5 th\u1ec3 cho React components, hooks, v\u00e0 c\u00e1c &#8220;best practices&#8221; c\u1ee7a React. \u0110\u1ec3 s\u1eed d\u1ee5ng, b\u1ea1n c\u1ea7n c\u00e0i \u0111\u1eb7t plugin v\u00e0 th\u00eam n\u00f3 v\u00e0o ph\u1ea7n <code>extends<\/code> v\u00e0 <code>plugins<\/code> trong file <code>.eslintrc.*<\/code> c\u1ee7a m\u00ecnh.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"ESLint-cho-Vuejs\"><\/span>ESLint cho Vue.js<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>T\u01b0\u01a1ng t\u1ef1, n\u1ebfu b\u1ea1n \u0111ang ph\u00e1t tri\u1ec3n v\u1edbi Vue.js, <code>eslint-plugin-vue<\/code> l\u00e0 plugin kh\u00f4ng th\u1ec3 thi\u1ebfu. N\u00f3 h\u1ed7 tr\u1ee3 ki\u1ec3m tra c\u00e1c file <code>.vue<\/code> (Single File Components), \u0111\u1ea3m b\u1ea3o c\u00fa ph\u00e1p template, script v\u00e0 style \u0111\u1ec1u tu\u00e2n th\u1ee7 quy t\u1eafc. Plugin n\u00e0y gi\u00fap duy tr\u00ec ch\u1ea5t l\u01b0\u1ee3ng code trong c\u00e1c d\u1ef1 \u00e1n Vue m\u1ed9t c\u00e1ch hi\u1ec7u qu\u1ea3.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"ESLint-cho-Nodejs\"><\/span>ESLint cho Node.js<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Khi ph\u00e1t tri\u1ec3n \u1ee9ng d\u1ee5ng backend v\u1edbi Node.js, ESLint c\u0169ng c\u00f3 th\u1ec3 gi\u00fap b\u1ea1n ki\u1ec3m tra code JavaScript. C\u00e1c quy t\u1eafc c\u00f3 s\u1eb5n c\u1ee7a ESLint c\u00f9ng v\u1edbi vi\u1ec7c c\u1ea5u h\u00ecnh <code>env: { node: true }<\/code> s\u1ebd l\u00e0 \u0111\u1ee7 cho h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p. Tuy nhi\u00ean, b\u1ea1n c\u0169ng c\u00f3 th\u1ec3 t\u00ecm th\u1ea5y c\u00e1c plugin c\u1ee5 th\u1ec3 cho Node.js n\u1ebfu c\u1ea7n ki\u1ec3m tra c\u00e1c v\u1ea5n \u0111\u1ec1 li\u00ean quan \u0111\u1ebfn API c\u1ee7a Node.js ho\u1eb7c c\u00e1c module \u0111\u1eb7c th\u00f9.<\/p>\n<p>Vi\u1ec7c s\u1eed d\u1ee5ng c\u00e1c plugin chuy\u00ean bi\u1ec7t n\u00e0y gi\u00fap ESLint hi\u1ec3u r\u00f5 h\u01a1n v\u1ec1 ng\u1eef c\u1ea3nh c\u1ee7a code b\u1ea1n \u0111ang vi\u1ebft, t\u1eeb \u0111\u00f3 \u0111\u01b0a ra c\u00e1c c\u1ea3nh b\u00e1o v\u00e0 g\u1ee3i \u00fd ch\u00ednh x\u00e1c h\u01a1n, ph\u00f9 h\u1ee3p v\u1edbi &#8220;best practices&#8221; c\u1ee7a t\u1eebng framework\/th\u01b0 vi\u1ec7n.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cach-cai-dat-ESLint-tu-dau-cho-nguoi-moi\"><\/span>C\u00e1ch c\u00e0i \u0111\u1eb7t ESLint t\u1eeb \u0111\u1ea7u cho ng\u01b0\u1eddi m\u1edbi<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 b\u1eaft \u0111\u1ea7u v\u1edbi ESLint, b\u1ea1n ch\u1ec9 c\u1ea7n \u0111i theo c\u00e1c b\u01b0\u1edbc \u0111\u01a1n gi\u1ea3n sau:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Buoc-1-Kiem-tra-xem-may-ban-da-co-Nodejs-chua\"><\/span>B\u01b0\u1edbc 1: Ki\u1ec3m tra xem m\u00e1y b\u1ea1n \u0111\u00e3 c\u00f3 Node.js ch\u01b0a<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Tr\u01b0\u1edbc h\u1ebft, h\u00e3y ch\u1eafc ch\u1eafn r\u1eb1ng Node.js \u0111\u00e3 \u0111\u01b0\u1ee3c c\u00e0i tr\u00ean m\u00e1y. N\u1ebfu ch\u01b0a c\u00f3, b\u1ea1n c\u00f3 th\u1ec3 l\u00ean trang ch\u1ee7 c\u1ee7a Node.js \u0111\u1ec3 t\u1ea3i v\u00e0 c\u00e0i \u0111\u1eb7t nh\u00e9.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cai-nodejs-tren-may-tinh.png\" alt=\"C\u00e0i nodejs tr\u00ean m\u00e1y t\u00ednh\" width=\"828\" height=\"410\" class=\"aligncenter size-full wp-image-31719\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cai-nodejs-tren-may-tinh.png 828w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cai-nodejs-tren-may-tinh-300x149.png 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cai-nodejs-tren-may-tinh-768x380.png 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/07\/Cai-nodejs-tren-may-tinh-750x371.png 750w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/p>\n<h3><span class=\"ez-toc-section\" id=\"Buoc-2-Cai-dat-ESLint-bang-npm\"><\/span>B\u01b0\u1edbc 2: C\u00e0i \u0111\u1eb7t ESLint b\u1eb1ng npm<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1edf <strong>Terminal<\/strong> (ho\u1eb7c Command Prompt n\u1ebfu b\u1ea1n d\u00f9ng Windows) v\u00e0 nh\u1eadp l\u1ec7nh sau:<\/p>\n<pre>npm install eslint --save-dev<\/pre>\n<p>\u0110\u00e2y l\u00e0 b\u01b0\u1edbc gi\u00fap b\u1ea1n th\u00eam ESLint v\u00e0o d\u1ef1 \u00e1n nh\u01b0 m\u1ed9t c\u00f4ng c\u1ee5 h\u1ed7 tr\u1ee3 ph\u00e1t hi\u1ec7n v\u00e0 s\u1eeda l\u1ed7i code.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Buoc-3-Ap-dung-bo-quy-tac-kiem-tra-pho-bien-neu-muon\"><\/span>B\u01b0\u1edbc 3: \u00c1p d\u1ee5ng b\u1ed9 quy t\u1eafc ki\u1ec3m tra ph\u1ed5 bi\u1ebfn (n\u1ebfu mu\u1ed1n)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n s\u1eed d\u1ee5ng quy t\u1eafc chu\u1ea9n nh\u01b0 c\u1ee7a Airbnb, h\u00e3y ch\u1ea1y ti\u1ebfp l\u1ec7nh d\u01b0\u1edbi \u0111\u00e2y:<\/p>\n<pre>npx install-peerdeps --dev eslint-config-airbnb<\/pre>\n<p>D\u0129 nhi\u00ean, b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 l\u1ef1a ch\u1ecdn c\u00e1c b\u1ed9 quy t\u1eafc kh\u00e1c t\u00f9y theo nhu c\u1ea7u v\u00e0 phong c\u00e1ch l\u1eadp tr\u00ecnh c\u1ee7a d\u1ef1 \u00e1n.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Buoc-4-Tao-file-cau-hinh-ESLint\"><\/span>B\u01b0\u1edbc 4: T\u1ea1o file c\u1ea5u h\u00ecnh ESLint<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u1ea1n c\u1ea7n m\u1ed9t file .eslintrc \u0111\u1ec3 ESLint bi\u1ebft ph\u1ea3i tu\u00e2n theo nh\u1eefng quy t\u1eafc n\u00e0o. V\u00ed d\u1ee5 c\u1ea5u h\u00ecnh v\u1edbi b\u1ed9 quy t\u1eafc Airbnb nh\u01b0 sau:<\/p>\n<pre>{\r\n\r\n\u00a0\u00a0\"extends\": \"airbnb-base\",\r\n\r\n\u00a0\u00a0\"rules\": {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\/\/ C\u1ea5u h\u00ecnh c\u00e1c quy t\u1eafc v\u00e0 ki\u1ec3m tra \u1edf \u0111\u00e2y\r\n\r\n\u00a0\u00a0}\r\n\r\n}<\/pre>\n<h3><span class=\"ez-toc-section\" id=\"Buoc-5-Chay-ESLint-de-kiem-tra-code-cua-ban\"><\/span>B\u01b0\u1edbc 5: Ch\u1ea1y ESLint \u0111\u1ec3 ki\u1ec3m tra code c\u1ee7a b\u1ea1n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Sau khi c\u00e0i \u0111\u1eb7t v\u00e0 c\u1ea5u h\u00ecnh xong, b\u1ea1n c\u00f3 th\u1ec3 b\u1eaft \u0111\u1ea7u ki\u1ec3m tra file JavaScript b\u1eb1ng l\u1ec7nh:<\/p>\n<pre>npx eslint yourfile.js<\/pre>\n<h2><span class=\"ez-toc-section\" id=\"Cach-su-dung-ESLint-de-kiem-tra-toan-bo-du-an\"><\/span>C\u00e1ch s\u1eed d\u1ee5ng ESLint \u0111\u1ec3 ki\u1ec3m tra to\u00e0n b\u1ed9 d\u1ef1 \u00e1n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0110\u1ec3 b\u1eaft \u0111\u1ea7u d\u00f9ng ESLint trong d\u1ef1 \u00e1n, b\u1ea1n ch\u1ec9 c\u1ea7n nh\u1edb c\u00fa ph\u00e1p c\u01a1 b\u1ea3n:<\/p>\n<pre>$ eslint [options] [file|dir|glob]*<\/pre>\n<p>V\u00ed d\u1ee5 \u0111\u01a1n gi\u1ea3n \u0111\u1ec3 ki\u1ec3m tra m\u1ed9t file c\u1ee5 th\u1ec3:<\/p>\n<pre>eslint index.js<\/pre>\n<p>ESLint s\u1ebd t\u1ef1 \u0111\u1ed9ng t\u00ecm file c\u1ea5u h\u00ecnh .eslintrc trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n v\u00e0 l\u00e0m theo c\u00e1c quy t\u1eafc b\u1ea1n \u0111\u00e3 thi\u1ebft l\u1eadp tr\u01b0\u1edbc \u0111\u00f3.<\/p>\n<p>N\u1ebfu to\u00e0n b\u1ed9 m\u00e3 ngu\u1ed3n c\u1ee7a b\u1ea1n n\u1eb1m trong th\u01b0 m\u1ee5c \/src, b\u1ea1n c\u00f3 th\u1ec3 qu\u00e9t to\u00e0n b\u1ed9 b\u1eb1ng l\u1ec7nh:<\/p>\n<pre>eslint src<\/pre>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n ESLint b\u1ecf qua c\u00e1c t\u1ec7p n\u1eb1m trong src\/dist v\u00e0 ch\u1ec9 t\u1eadp trung v\u00e0o c\u00e1c file .js, h\u00e3y d\u00f9ng:<\/p>\n<pre>eslint src --ignore-pattern 'src\/dist' --ext .js<\/pre>\n<p>M\u1ed9t trong nh\u1eefng t\u00ednh n\u0103ng ti\u1ec7n l\u1ee3i nh\u1ea5t c\u1ee7a ESLint l\u00e0 kh\u1ea3 n\u0103ng t\u1ef1 s\u1eeda c\u00e1c l\u1ed7i \u0111\u01a1n gi\u1ea3n. \u0110\u1ec3 k\u00edch ho\u1ea1t t\u00ednh n\u0103ng n\u00e0y, ch\u1ec9 c\u1ea7n th\u00eam &#8211;fix v\u00e0o l\u1ec7nh:<\/p>\n<pre>eslint src --fix<\/pre>\n<p>ESLint kh\u00f4ng ch\u1ec9 l\u00e0 m\u1ed9t c\u00f4ng c\u1ee5 ki\u1ec3m tra m\u00e3 ngu\u1ed3n \u0111\u01a1n thu\u1ea7n; n\u00f3 l\u00e0 m\u1ed9t tr\u1ee3 th\u1ee7 \u0111\u1eafc l\u1ef1c gi\u00fap m\u1ecdi l\u1eadp tr\u00ecnh vi\u00ean JavaScript n\u00e2ng cao ch\u1ea5t l\u01b0\u1ee3ng code, c\u1ea3i thi\u1ec7n hi\u1ec7u su\u1ea5t l\u00e0m vi\u1ec7c nh\u00f3m v\u00e0 \u0111\u1ea9y nhanh qu\u00e1 tr\u00ecnh ph\u00e1t tri\u1ec3n d\u1ef1 \u00e1n. T\u1eeb vi\u1ec7c ph\u00e1t hi\u1ec7n l\u1ed7i s\u1edbm, \u0111\u1ea3m b\u1ea3o t\u00ednh nh\u1ea5t qu\u00e1n, \u0111\u1ebfn vi\u1ec7c t\u1ef1 \u0111\u1ed9ng h\u00f3a quy tr\u00ecnh ki\u1ec3m tra, ESLint mang l\u1ea1i gi\u00e1 tr\u1ecb v\u01b0\u1ee3t tr\u1ed9i.<\/p>\n<p>N\u1ebfu b\u1ea1n \u0111ang t\u00ecm ki\u1ebfm gi\u1ea3i ph\u00e1p \u0111\u1ec3 t\u1ed1i \u01b0u h\u00f3a m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n c\u1ee7a m\u00ecnh, \u0111\u1eb7c bi\u1ec7t l\u00e0 khi l\u00e0m vi\u1ec7c v\u1edbi c\u00e1c d\u1ef1 \u00e1n JavaScript \u0111\u00f2i h\u1ecfi hi\u1ec7u n\u0103ng cao v\u00e0 t\u00ednh \u1ed5n \u0111\u1ecbnh, \u0111\u1eebng ng\u1ea7n ng\u1ea1i t\u00edch h\u1ee3p ESLint. C\u00f4ng c\u1ee5 n\u00e0y s\u1ebd gi\u00fap b\u1ea1n v\u00e0 nh\u00f3m c\u1ee7a m\u00ecnh x\u00e2y d\u1ef1ng nh\u1eefng \u1ee9ng d\u1ee5ng m\u1ea1nh m\u1ebd, d\u1ec5 b\u1ea3o tr\u00ec, v\u00e0 \u00edt l\u1ed7i h\u01a1n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Khi x\u00e2y d\u1ef1ng website v\u00e0 \u1ee9ng d\u1ee5ng, l\u1eadp tr\u00ecnh vi\u00ean JavaScript lu\u00f4n \u0111\u1ed1i m\u1eb7t v\u1edbi th\u00e1ch th\u1ee9c l\u1edbn: l\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 duy tr\u00ec ch\u1ea5t l\u01b0\u1ee3ng m\u00e3 ngu\u1ed3n cao c\u1ea5p, \u0111\u1eb7c bi\u1ec7t khi l\u00e0m vi\u1ec7c trong c\u00e1c d\u1ef1 \u00e1n l\u1edbn hay theo nh\u00f3m? C\u00f9ng InterData t\u00ecm hi\u1ec3u c\u00f4ng c\u1ee5 ESLint l\u00e0 g\u00ec, nh\u1eefng l\u1ee3i \u00edch<\/p>\n","protected":false},"author":11,"featured_media":31723,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-31716","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lap-trinh"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/31716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=31716"}],"version-history":[{"count":9,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/31716\/revisions"}],"predecessor-version":[{"id":31729,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/31716\/revisions\/31729"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/31723"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=31716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=31716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=31716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}