Khởi tạo dự án ReactJS: Cấu trúc chuẩn, dễ bảo trì, mở rộng

0 0 0

Người đăng: Nguyen Le Than

Theo Viblo Asia

Mở đầu

Việc xây dựng một base project chuẩn cho ReactJS + TypeScript ngay từ đầu sẽ giúp tiết kiệm thời gian, đồng bộ code, và dễ dàng mở rộng dự án về sau. Đặc biệt trong môi trường làm việc nhóm, một cấu trúc rõ ràng và các công cụ hỗ trợ phù hợp sẽ giúp tăng năng suất và chất lượng code.

Trong bài viết này, mình sẽ hướng dẫn cách tạo một base project hiệu quả, tích hợp các công cụ như ESLint, Prettier, Husky... để sẵn sàng cho mọi dự án thực tế.

Nội dung

Khởi tạo dự án

Để khởi tạo dự án mình sử dụng Vite vì hiệu suất tốt hơn. Bạn có thể tùy chọn công cụ quản lý thư viện phù hợp. Mình khuyến khích sử dụng pnpm.

NPM:

$ npm create vite@latest my-vue-app -- --template react-ts

YARN:

$ yarn create vite my-vue-app --template react-ts

PNPM:

$ pnpm create vite my-vue-app --template react-ts

Cấu trúc thư mục

Sau khi đã khởi tạo dự án, việc tiếp theo bạn cần làm là tiến hành tạo cấu trúc thư mục.

Nội dung và ý nghĩa của từng thư mục như sau:

|-- src/ |-- apis/ # Dùng để khởi tạo các api function |-- assets/ # Chứa các file tài nguyên (images, fonts, icons, etc.) |-- components/ # Chứa các components |-- constants/ # Chứa các file constant |-- types/ # Dùng để chứa các file định nghĩa type |-- hooks/ # Chứa hook custom |-- layouts/ # Chứa các layout component |-- pages/ # Chứa các trang của dự án |-- lib/ # Chứa các file config của thư viện bên ngoài |-- providers/ # Chứa các providers (theme, store, etc.) |-- schemas/ # Chứa các schemas validate ( zod, yup, ...) |-- stores/ # Quản lý state (Redux, MobX, etc.) |-- styles/ # Quản lý các css global hoặc thư viện scss |-- utils/ # Chứa các hàm dùng chung của dự án |-- App.tsx # Định nghĩa root file |-- routes.tsx # Định nghĩa router

Thiết lập & cấu hình công cụ hổ trợ

Prettier

Tiếp theo bạn cần cấu hình prettier - code formatter.

Install:
pnpm add --save-dev --save-exact prettier

Tạo file .prettierrc tại root folder, và thêm đoạn code sau:

{ "semi": true, "singleQuote": true, "tabWidth": 2, "useTabs": false, "printWidth": 80
}

Tạo file .prettierignore tại root folder, và thêm đoạn code sau:

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies
/node_modules
/.pnp
.pnp.js # testing
/coverage # next.js
.next
/.next/
/out/ # production
/build # misc
.DS_Store
*.pem # debug
npm-debug.log*
yarn-debug.log*
yarn-error.log* # local env files
.env.local
.env.development.local
.env.test.local
.env.production.local # vercel
.vercel # changelog
CHANGELOG.md

ESLint

Tiếp theo bạn cần cấu hình Eslint - công cụ dùng để code formatter ( javascript ) cùng với báo cáo và hiển thị các lỗi về javascript.

Cài đặt các thư viện cần thiết:

 pnpm add --save-dev @typescript-eslint/eslint-plugin pnpm add --save-dev @typescript-eslint/parser pnpm add --save-dev eslint-plugin-import pnpm add --save-dev eslint-plugin-react

Nếu như ở bước khởi tạo Vite đã cấu hình sẵn Eslint thì bạn chỉ cần đổi tên và chỉnh sửa nội dung lại file .eslintrc.cjs và thêm đoạn code như sau:

module.exports = { root: true, env: { browser: true, es2020: true }, extends: [ 'eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:react-hooks/recommended', ], ignorePatterns: ['dist', '.eslintrc.cjs'], parser: '@typescript-eslint/parser', plugins: ['react', 'react-refresh', 'import'], rules: { 'react/self-closing-comp': 'error', 'no-console': ['warn', { allow: ['warn', 'error'] }], 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': [ 'warn', { argsIgnorePattern: '^_', destructuredArrayIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', varsIgnorePattern: '^_', }, ], 'import/order': [ 'error', { groups: [ 'builtin', 'external', 'internal', ['parent', 'sibling'], 'index', ], pathGroups: [ { pattern: '@/**', group: 'internal', }, ], 'newlines-between': 'always', }, ], },
};

VSCode

Tiếp theo, bạn cần cấu hình lại VSCode một chút.

Tạo file .vscode/settings.json tại thư mục root ngang cấp với /src, và thêm đoạn code setting sau:

{ "editor.defaultFormatter": "esbenp.prettier-vscode", // Cài đặt formatter là prettier "editor.formatOnSave": true, // Cài đặt khi lưu code ( Ctrl + S ) sẽ tự động thực thi prettier "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" // Cài đặt khi lưu code ( Ctrl + S ) sẽ tự động thực thi eslint }
}

Husky & Lint-staged

Tiếp theo bạn cần cấu hình Husky - công cụ tự động thực hiện lệnh nào đó trước khi thực hiện git commit. Chỉ khi lệnh đó thực thi thành công thì git commit mới được chạy. Điều này giúp cho các thành viên trong dự án đều phải tuân thủ các convention code mà dự án đã đề ra trước khi push commit code.

Mở terminal tại folder root dự án và chạy lệnh sau:

// Cài đặt husky:
pnpm add --save-dev husky
pnpm exec husky init // Cài đặt lint-staged:
pnpm add --save-dev lint-staged

Tiếp theo, mở file /.husky/pre-commit thay thế đoạn code sau:

pnpm lint-staged

Sau đó mở package.json thêm đoạn code này vào. Lint-staged sẽ thực thi các script cho những file đang chỉnh sửa thay vì chạy trên toàn bộ dự án.

"lint-staged": { "*.{ts,tsx}": [ "pnpm lint:fix", "pnpm format", "git add ." ] }

Như đoạn code trên, khi bạn chạy script pnpm lint-staged thì các lệnh pnpm lint:fix pnpm format git add . sẽ được thực thi lần lượt trên các file có đuôi ts,tsx mà bạn đang chỉnh sửa.

Cấu hình script

Tiếp theo, bạn cần thêm các script để chạy các tool prettier, eslint, husky,lint-staged đã cấu hình trước đó.

Thêm đoạn code sau vào scripts của file package.json

 "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", // Dùng để kiểm tra các lỗi về eslint hiện có trên toàn bộ file dự án có đuôi là ts,tsx "lint:fix": "pnpm lint --fix", // Dùng để kiểm tra và fix những lỗi về eslint mà tool có thể tự động fix được "format": "prettier --write \"src/**/*.{ts,tsx}\"", // Dùng để kiểm tra và fix những lỗi về format code

Cấu hình Vite

Mình cần cấu hình lại Vite 1 chút để có thể sử dụng được alias path và svg file.

Tại file vite.config.ts bạn thay thế bằng đoạn code sau:

Lưu ý: Các thư viện nào chưa có bạn install về nhé~!

import path from 'path'; import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import svgr from 'vite-plugin-svgr';
import checker from 'vite-plugin-checker'; export default defineConfig({
plugins: [ react(), svgr(), checker({ typescript: true, eslint: { lintCommand: 'eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0', }, }),
],
resolve: { alias: { '@': path.resolve(__dirname, './src/'), },
},
});

Tiếp theo, tại file src/vite-env.d.ts bạn thêm dòng code sau:

/// <reference types="vite-plugin-svgr/client" />

Cài đặt thư viện

Bước cuối cùng bạn cần cài đặt và cấu hình cho các thư viện cần thiết cho dự án, dưới đây là một số thư viện mà bạn nên cài:

  • axios
  • date-fns
  • lodash
  • react-hook-form
  • zod
  • react-router-dom

Ngoài ra, tùy thuộc vào từng dự án mà bạn sẽ chọn các thư viện về CSS ( tailwindcss, MUI, Antd,...), quản lý state ( redux, zustand,...) và i18n khác nhau.

Tổng kết

Việc xây dựng một base project chuẩn chỉnh không chỉ giúp bạn tiết kiệm thời gian trong giai đoạn khởi tạo mà còn đặt nền móng vững chắc cho sự phát triển lâu dài của dự án. Với những cấu hình và công cụ đã đề cập như ESLint, Prettier, Husky... bạn sẽ dễ dàng duy trì chất lượng code, giảm thiểu lỗi vặt, và tăng hiệu suất cho team.

Nếu bạn cần source code đầy đủ của project base reactjs + typescript chuẩn thì hãy để lại bình luận ở dưới.!!!!

Bình luận

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

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

Hãy sử dụng ESLint cho dự án của bạn!

. Bài viết gốc: https://manhhomienbienthuy.bitbucket.io/2018/May/20/we-should-use-eslint-in-project.html (đã xin phép tác giả ).

0 0 83

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

Là lập trình viên, bạn đã từng nghe nói đến .editorconfig?

Hôm kia tình cờ lân la lên thư viện PaperCSS trên GitHub, mình phát hiện ra project của họ có sử dụng file .editorconfig. Tò mò vì chả biết đó là gì, mình bắt đầu tìm hiểu thử và thực sự bất ngờ về công dụng của nó. Và tìm hiểu .

0 0 46

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

Cấu hình eslint airbnb, prettier cho dự next.js sử dụng typescript

Chào mọi, mình đã quay lại đây. Hôm nay mình sẽ đem đến một chủ đề linter cụ thể cấu hình eslint cho dự án next.

0 0 206

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

Nâng cao chất lượng code và hiệu quả làm việc nhóm với Husky, Lint-Staged, CommitLint

Chào mừng các bạn đã quay trở lại với blog của mình, lại là mình đây (dù chả ai biết mình là ai ). Hôm nay không Docker cũng chẳng VueJS , mà chúng ta sẽ cùng nhau tìm hiểu cách cải thiện chất lượng c

0 0 120

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

Tận dụng tối đa 100% sức mạnh của ESLint (phần 1)

Nếu bạn là một JavaScript developer chân chính, một trong những điều quan trọng bạn cần biết là sử dụng Linter, cụ thể là ESLint. Nhưng sử dụng thế nào cho hợp lý, cho đúng cách, phát huy đúng tác dụn

0 0 90

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

Tại sao phải sử dụng ESlint?

1. Lint là gì. 2. ESlint là gì.

0 0 117