- vừa được xem lúc

[Series] Setup Source Template for Vue 3 - Phần 3

0 0 26

Người đăng: Trung Phạm

Theo Viblo Asia

Giới thiệu

Chào tất cả các bạn, phần 2 mình đã hướng dẫn các bạn setup về vue-router, pinia, vitest. Trong phần này mình tiếp tục hướng dẫn các bạn setup về Eslint, PrettierCommitlint

Nội Dung

Đây là cấu trúc thư mục của dự án sau khi setup.

vue-template/ ├── public/ | ├── favicon.ico ├── src/ | ├── assets/ | | └── logo.png | ├── components/ | | └── HelloWorld.vue | ├── core/ | ├── hooks/ | | └── useAuth.ts | ├── layouts/ | | └── BlankLayout.vue | | └── MainLayout.vue | ├── pages/ | | └── Dashboard.vue | | └── Error.vue | | └── NotFound.vue | ├── routes/ | | └── index.ts | ├── stores/ | | └── auth.ts | ├── test/ | | └── components/ | | | └── Sample.spec.ts | ├── App.vue | └── main.ts | └── vite-env.d.ts | └── vue-shim.d.ts ├── package.json ├── README.md ├── .cz-config.ts ├── .env.sample ├── .eslintrc ├── .prettierrc ├── .commitlint.config.cjs ├── tsconfig.json ├── tsconfig.node.json └── vite.config.js └── unocss.config.ts

Cài đặt

Trong phần này mình sẽ hướng dẫn các bạn setup về: 🔥 Eslint, prettier, commitlint

Eslint

ESLint là một open source giúp bạn tìm và khắc phục sự cố với mã JavaScript của mình. Không quan trọng bạn đang viết JavaScript trong trình duyệt hay trên máy chủ, ESLint có thể giúp code của bạn hoạt động tốt nhất.

pnpm i -D eslint

eslint-config-prettier

Plugin này Tắt tất cả các quy tắc không cần thiết hoặc có thể xung đột với Prettier. Nó cho phép bạn sử dụng cấu hình của mình mà không để các cấu hình của nó cản trở khi sử dụng Prettier.

Lưu ý rằng config này chỉ tắt các quy tắc, vì vậy chỉ nên sử dụng config này cùng với một số config khác.

pnpm i -D eslint-config-prettier

Sau đó, thêm "prettier" vào mảng "extends" trong file .eslintrc của bạn. Đảm bảo đặt nó ở vị trí cuối cùng để nó có thể ghi đè lên các cấu hình khác.

{ "root": true, "env": { "browser": true }, "extends": ["prettier"],
}

eslint-plugin-prettier

Chạy Prettier dưới dạng quy tắc ESLint và báo cáo sự khác biệt dưới dạng các sự cố ESLint.

Nếu định dạng mong muốn của bạn không khớp với đầu ra của Prettier, bạn nên sử dụng một công cụ khác chẳng hạn như prettier-eslint để thay thế.

pnpm i -D eslint-config-prettier

Sau đó, bạn cần thêm plugin:prettier/recommended vào mảng "extends" trong file .eslintrc của bạn.

{ "extends": ["plugin:prettier/recommended"]
}

eslint-plugin-vue

Plugin ESLint chính thức cho Vue.js. Nó cho phép chúng ta kiểm tra <template> và <script> của các file .vue bằng ESLint, cũng như code Vue trong các file .js.

Lưu ý: Bắt buộc ESLint v6.2.0 trở lên và Node.js v14.17.x, v16.x trở lên.

pnpm i -D eslint-plugin-vue

Sau đó, bạn cần thêm plugin:vue/vue3-recommended vào mảng "extends" trong file .eslintrc của bạn.

{ "extends": ["plugin:vue/vue3-recommended"]
}

Cài đặt 1 số plugin ESLint cung cấp các quy tắc lint cho cơ sở mã TypeScript.

pnpm i -D @typescript-eslint/eslint-plugin @typescript-eslint/parser @vue/eslint-config-typescript @vue/test-utils

Đây là file eslint đầy đủ sau khi các bạn cài đặt xong các plugin trên:

// .eslintrc
{ "root": true, "env": { "browser": true }, "extends": ["eslint:recommended", "plugin:vue/vue3-recommended", "@vue/eslint-config-typescript", "prettier"], "rules": {}, "ignorePatterns": ["node_modules/*", "dist/*", "public/*"] // các thư mục trong mảng này nó sẽ bỏ qua và không check lỗi
} 

Bạn có thể thêm script để kiểm tra tất cả các file trong project của mình:

"scripts": { "lint": "eslint --ext .js,.ts,.vue --ignore-path .gitignore src", // check lỗi eslint "lint:fix": "eslint --ext .js,.ts,.vue --ignore-path .gitignore --fix src", // check và fix lỗi eslint có thể fix nhưng không phải là hoàn toàn 
}

Prettier

Prettier nó giúp chúng ta code theo chuẩn mà mình mong muốn ( bản chất nó là rule do mình quy định nên mỗi người sẽ có rule khác nhau :v ).

pnpm i -D prettier

Sau đó, bạn cần tạo 1 file .prettierrc

{ "semi": false, // Không sử dụng dấu chấm phẩy để kết thúc câu lệnh. "singleQuote": true, // Sử dụng dấu ngoặc đơn (' ') để gọi chuỗi. "arrowParens": "avoid", // Tránh sử dụng dấu ngoặc cho hàm Arrow Function nếu nó chỉ có một tham số. "tabWidth": 2, // Chiều rộng của một tab là 2 khoảng trắng. "printWidth": 120 // Chiều rộng cho phép của một dòng mã nguồn là 120 ký tự.
}

Bạn có thể thêm 1 đoạn script để chạy format cho tất cả các file trong project của mình:

 "scripts": { ... "format": "prettier . --write", ... },

Commitlint

Commitlint giúp nhóm của bạn tuân thủ quy ước commit chung của team, để người review có thể review 1 cách trực quan hơn,...

pnpm i -D commitlint

Sau đó, các bạn cài thư viện commitizen để chạy commit trong terminal

pnpm i -g commitizen

Tiếp theo, các bạn cài thêm emoji và plugin cho commitlint

pnpm i -D commitlint-config-gitmoji cz-customizable

Tiếp theo, các bạn tạo 1 file commitlint.config.cjs và thêm config.

// eslint-disable-next-line no-undef
module.exports = { extends: ['gitmoji'], rules: { 'header-max-length': [0, 'always', 100], },
}

Tiếp theo, các bạn tạo 1 file .cz-config.ts để config rule commit của các bạn.

module.exports = { types: [ { value: ':sparkles: feat', name: '✨ feat:\tAdding a new feature' }, { value: ':bug: fix', name: '🐛 fix:\tFixing a bug' }, { value: ':construction: wip', name: '🚧 wip:\tWork in progress' }, { value: ':lipstick: style', name: '💄 style:\tAdd or update styles, ui or ux', }, { value: ':hammer: refactor', name: '🔨 refactor:\tCode change that neither fixes a bug nor adds a feature', }, { value: ':memo: docs', name: '📝 docs:\tAdd or update documentation' }, { value: ':zap: perf', name: '⚡️ perf:\tCode change that improves performance', }, { value: ':white_check_mark: test', name: '✅ test:\tAdding tests cases', }, { value: ':rewind: revert', name: '⏪️ revert:\tRevert to a commit' }, { value: ':construction_worker: build', name: '👷 build:\tAdd or update regards to build process', }, { value: ':racehorse: ci', name: '🐎 ci:\tAdd or update regards to CI process', }, ], scopes: [ { name: 'all platforms' }, { name: 'desktop' }, { name: 'mobile' }, { name: 'packages' }, { name: 'unit test' }, { name: 'settings' }, { name: 'code convention' }, ], messages: { type: "***************** 🎼🎧🎉 Select the type of change that you're committing *****************:", scope: '\n😪 Denote the SCOPE of this change (optional):', // used if allowCustomScopes is true customScope: '🎁 Denote the SCOPE of this change:', subject: '🔖 Subject - Write a SHORT, IMPERATIVE tense description of the change:\n', body: '📝 Body - Provide a LONGER description of the change (optional). Use "|" to break new line:\n', breaking: '💥 List any BREAKING CHANGES (optional):\n', footer: '🔚 List any ISSUES CLOSED by this change (optional). E.g.: #31, #34:\n', confirmCommit: '😄 Are you sure you want to proceed with the commit above?', }, scopeOverrides: { fix: [{ name: 'merge' }, { name: 'style' }, { name: 'test' }, { name: 'hotfix' }], }, allowCustomScopes: true, allowBreakingChanges: ['feat', 'fix'], // skip any questions you want skipQuestions: [], subjectLimit: 100,
} 

Tiếp theo, các bạn thêm config vào file package.json

 "scripts": { ... "cm": "cz" ... }, "lint-staged": { "src/**/*.{js,jsx,ts,tsx}": [ "pnpm run lint", "pnpm run format" ], "**/*.{js,jsx,ts,tsx,css,scss,md,json}": [ "pnpm run format" ] }, "config": { "commitizen": { "path": "./node_modules/cz-customizable" }, "cz-customizable": { "config": ".cz-config.ts" } }

Tiếp theo, bạn cài đặt husky ( Husky được sử dụng để tạo các thông báo commit, run tests, lint code, v.v... khi bạn commit hoặc push code ).

pnpm i -D husky lint-staged

Tiếp theo, các bạn chạy lệnh:

pnpm dlx husky-init && pnpm install

Tiếp theo, các bạn thêm file config vào trong folder .husky:

// commit-msg
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh" npx commitlint --edit $1
// pre-commit
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh" pnpm lint-staged
// pre-push
#!/usr/bin/env sh
. "$(dirname "$0")/_/husky.sh" pnpm run test

Và cuối cùng chúng ta có thể chạy test thử xem nó đã hoạt động hay chưa nhé :v

pnpm run cm

Chọn loại commit (theo hình ở dưới thì mình chọn ** **):

All lines except first will be wrapped after 100 characters.
? ***************** 🎼🎧🎉 Select the type of change that you're committing *****************: 👷 build: Add or update regards to build process 🐎 ci: Add or update regards to CI process ✨ feat: Adding a new feature ❯ 🐛 fix: Fixing a bug 🚧 wip: Work in progress 💄 style: Add or update styles, ui or ux 🔨 refactor: Code change that neither fixes a bug nor adds a feature 

Chọn scope của loại commit:

😪 Denote the SCOPE of this change (optional): (Use arrow keys)
❯ all platforms desktop mobile packages unit test settings code convention 

Viết mô tả ngắn cho commit:

? 🔖 Subject - Write a SHORT, IMPERATIVE tense description of the change: setup eslint & prettier & commitlint

Viết mô tả dài cho commit:

? 📝 Body - Provide a LONGER description of the change (optional). Use "|" to break new line: // này thì tuỳ chọn nếu bạn nào muốn viết chi tiết thì ghi ở đây

Viết số issue trong task của mình:

? 🔚 List any ISSUES CLOSED by this change (optional). E.g.: #31, #34: #Issue-1

Sau đó, nó sẽ hiển thị như thế này:


###--------------------------------------------------------###
:bug: fix(all platforms): setup eslint \& prettier \& commitlint
###--------------------------------------------------------### ? 😄 Are you sure you want to proceed with the commit above? (Yneh) 

Mình Enter và chờ các script chạy eslint và prettier :v

Sau khi hoàn thành commit thì nó sẽ hiển thị như thế này:


###--------------------------------------------------------###
→ No staged files match any configured task.
[feat/chapter-2 44e3f9b] :bug: fix(all platforms): setup eslint \& prettier \& commitlint 1 file changed, 1 deletion(-)

Như vậy là các bạn đã setup thành công.

Kết bài

Vậy là mình đã hoàn thành setup xong eslint, prettier, commitlint. Cám ơn các bạn đã theo dõi series của mình. Hẹn các bạn ở bài viết tiếp theo. Nếu các bạn trong quá trình setup mà có vướng mắc gì thì các bạn cứ comment dưới đây mình sẽ cố gắng support các bạn và giải đáp các thắc mắc của bạn. Tks all

Bình luận

Bài viết tương tự

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 163

- vừa được xem lúc

Bài 1: Cài đặt Vue và chạy chương trình Hello world đầu tiên

Ở bài đầu tiên này mình sẽ hướng dẫn các bài cài đặt VueJS vào project Laravel, sau đó chúng ta sẽ cùng xem những thứ cơ bản của Vue nhé. Vì Laravel đã hỗ trợ tích hợp VueJS nên việc cài đặt của chúng ta sẽ hết sức đơn giản.

0 0 138

- vừa được xem lúc

Lazy loading and code splitting in Vue.js

Việc giữ cho ứng dụng của bạn tải nhanh ngày càng khó hơn. Trong loạt bài này, tôi sẽ đi sâu vào các kỹ thuật tối ưu hiệu suất Vue và bạn có thể sử dụng trong các ứng dụng Vue.

0 0 115

- vừa được xem lúc

Validating Vue.js Forms Using Vuelidate

Introduction. Validate thông tin đầu vào trên các ứng dụng web là rất quan trọng.

0 0 217

- vừa được xem lúc

5 Good Practices mình đang sử dụng trong Vuejs

Mở đầu. Mình đã sử dụng vuejs được cũng được 1 năm trở lại đây.

0 0 101

- vừa được xem lúc

[P5] VueJS - Một vài Interpolations khác trong Vue

Ở bài viết trước, mình đã nói về một vài keyword trong Vue như v-if, v-else, v-show, v-for, ... Chúng thực chất là các syntax đặc biệt của Vue để thao tác linh hoạt với các DOM ảo, được gọi là Interpolations. Ngoài ra, Vue còn các Interpolations khác. Mục đích của nó thì đã quá rõ ràng, hiển thị tex

0 0 61