Thêm ESlint vào trong VueJS

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu về cách sử dụng ESlint trong ứng dụng VueJS. Nếu bạn chưa biết ESLint là gì thì hãy đọc bài viết này trước để tìm hiểu về ESLint. Bài viết này chúng ta sẽ sử dụng source code của bài viết về cách xây dựng một ứng SSR trong VueJS hoặc sử dụng webpack-simple dùng vue-cli template

Cài đặt ESLint

Vào dự án VueJS của bạn và cài đặt ESLint như sau

$ npm install eslint --save-dev

Cài đặt eslint-loader

Plugin này giúp cho Webpack nạp một vài pre-test trên các file trước khi nạp chúng

$ npm install eslint-loader --save-dev

Cấu hình kiểm tra các file .js

Được tích hợp trong loader chúng ta đã cài ở bên trên

Trong file webpack.config.js, thêm rule sau đây ở phía trước rule /\.js$/

{
  enforce: "pre",
  test: /\.js$/,
  exclude: /node_modules/,
  loader: "eslint-loader"
}
  • enforce: "pre" – chỉ định rằng bạn muốn loader này chạy trước các loader thông thường.
  • Đảm bảo rằng bạn sẽ loại bỏ thư mục /node_modules/ khi kiểm tra.

Chạy thử cài đặt

$ npm start hoặc npm run dev

Nó sẽ trả về một lỗi như sau:

Module build failed: Error: No ESLint configuration found.

Thêm file cấu hình

Trong thư mục gốc thêm file sau .eslintrc.js

Bạn có thể tìm hiểu thêm thông tin về file này ở đây: https://eslint.org/docs/user-guide/configuring.

Do webpack-simple template dựa trên Babel, chúng ta cũng cần cài đặt thêm phân tích cú pháp babel-eslint

npm install babel-eslint --save-dev

Thay vì tự định nghĩa và viết các rule cho dự án, chúng ta có thể sử dụng lại rule theo chuẩn chung, hoặc rule của vue

Cài đặt như sau

$ npm install --save-dev eslint-config-standard eslint-plugin-standard eslint-plugin-promise eslint-plugin-import eslint-plugin-node eslint-plugin-vue

Thêm đoạn code sau cho file .eslintrc.js

module.exports = {
 root: true,
 parser: 'babel-eslint',
 parserOptions: {
   sourceType: 'module'
 },
 env: {
   browser: true,
 },
 extends: 'standard',
 'rules': {
   'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
 }
}

Nào hãy chạy thử lại dự án

$ npm start hoặc npm run dev

Sau khi chạy bạn sẽ thấy một loạt lỗi được đưa ra bởi ESlint hãy thử tự fix những lỗi này

✖ 40 problems (40 errors, 0 warnings)
 3 errors, 0 warnings potentially fixable with the ` --fix` option.

Như vậy chúng ta đã hoàn thành xong việc cấu hình ESLing cho các file .js

Cấu hình kiểm tra các file .vue

Về cơ bản chúng ta đã kiểm tra được hầu hết các file .js

Nhưng vẫn còn nhiều đoạn code JS cần được kiểm tra và nó được đặt trong các file .vue.  Chúng ta cần sử dụng plugin eslint-plugin-html

$ npm install --save-dev eslint-plugin-html

Để cho các thông báo khi kiểm tra các file đẹp hơn, chúng ta nên cài đặt thêm plugin sau

$ npm install --save-dev eslint-friendly-formatter

Nào hãy sửa đoạn cấu hình bên trên trong cấu hình của webpack, chúng ta thêm các file vue và sử dụng định dạng mới mà chúng ta vừa cài ở trên

{
  enforce: "pre",
  test: /\.(js|vue)$/,
  exclude: /node_modules/,
  loader: "eslint-loader",
  options: {
    formatter: require('eslint-friendly-formatter')
  }
}

Và cấu hình .eslintrc.js bao gồm html plugin và plugin:vue/recommended

module.exports = {
  root: true,
  parserOptions: {
    parser: 'babel-eslint',
    sourceType: 'module',
    allowImportExportEverywhere: true
  },
  env: {
    browser: true,
  },
  plugins: [
    'html'
  ],
  extends: [
    'standard',
    'plugin:vue/recommended'
  ],
  rules: {
    "no-debugger": process.env.NODE_ENV === 'production' ? 2 : 0,
    "indent": ['error', 2],
    "vue/html-indent": 0,
    "vue/singleline-html-element-content-newline": 0,
    "vue/component-name-in-template-casing": 0,
    "vue/html-self-closing": 0,
    "no-tabs": 0
  }
}

Hãy thử chạy lại

$ npm start hoặc npm run dev

Bạn sẽ nhìn thấy thêm một loạt lỗi mới và hãy thử sửa nó. Mấy của tôi như sau

✘ 34 problems (34 errors, 0 warnings)

Các lỗi:

30 http://eslint.org/docs/rules/indent
3 http://eslint.org/docs/rules/space-before-function-paren
1 http://eslint.org/docs/rules/quotes

Tham khảo Github sử dụng branch vue-eslint

 

You May Also Like

About the Author: Nguyen Dinh Thuc

Leave a Reply

Your email address will not be published.