Published on

Tuỳ chỉnh cấu trúc để dự án tươm tất hơn

Có bao giờ quý vị cảm thấy phiền khi phải viết những đoạn mã import dài dòng, lặp lại nhiều lần cú pháp `../` không? Hãy tùy chỉnh cấu trúc dự án để giảm bớt sự phiền toái đó.
Tuỳ chỉnh cấu trúc để dự án tươm tất hơn
Authors
  • Name
    Nguyen Pham

Tổng quan

Khi làm việc với các Framework như Next.js, Angular, Vue... chúng ta thường xuyên phải viết các đoạn mã để import các thư viện và thường phải lặp lại nhiều lần cú pháp ../ để truy cập đến các thư mục khác nhau trong dự án. Điều này không chỉ làm cho mã nguồn trở nên khó đọc mà còn tạo ra sự phiền toái khi phải thay đổi cấu trúc thư mục của dự án. Ví dụ:

javascript
import { Layout } from '../../../components/Layout';
import { moduleSettings } from '../../../../config/moduleSettings';
import { formatHTML } from '../../../../utils/formatHTML';
import bg from '../../../../../public/images/bg.jpg';

Trong ví dụ trên, chúng ta phải viết đến 3 dấu ../ để truy cập đến thư mục components. Vậy tại sao chúng ta không viết đơn giản hơn như sau:

javascript
import { Layout } from '@/components/Layout';
import { moduleSettings } from '@/config/moduleSettings';
import { formatHTML } from '@/utils/formatHTML';
import bg from '@/public/images/bg.jpg';

Để làm được điều này, chúng ta cần tùy chỉnh cấu trúc thư mục của dự án. Dưới đây là cách tùy chỉnh cấu trúc thư mục của dự án:

Cấu trúc thư mục mặc định của dự án

Cấu trúc thư mục mặc định của dự án dự án như sau:

bash
.vscode/ # Thư mục chứa cấu hình của Visual Studio Code
./src/ # Thư mục chứa mã nguồn của dự án
├── app/ # 
   ├──api/ # Thư mục chứa các file API
   ├──components/ # Thư mục chứa các component
   ├──pages/ # Thư mục chứa các trang
   └──templates/ # Thư mục chứa các template
├── config/ # Thư mục chứa các file cấu hình
├── styles/ # Thư mục chứa các file CSS
├── modules/ # Thư mục chứa các module
├── hooks/ # Thư mục chứa các custom hooks
└── utils/ # Thư mục chứa các hàm tiện ích
./public/ # Thư mục chứa các file tĩnh
./tsconfig.json # File cấu hình TypeScript
./next.config.mjs # File cấu hình dự án
./package.json # File cấu hình npm
./eslint.config.mjs # File cấu hình ESLint

Cài đặt

Trước tiên, chúng ta cần cài đặt @types/node

bash
npm i -D @types/node

Bây giờ chúng ta sẽ tùy chỉnh cấu trúc thư mục của dự án để có thể import các thư viện một cách dễ dàng hơn bằng cú pháp @/.

Mở file tsconfig.json và tuỳ chỉnh đoạn mã sau:

json
{
    "compilerOptions": {
        "baseUrl": ".",
        "paths": {
            "@/*": ["src/*"],
            "@/components/*": ["src/app/components/*"],
            "@/public/*": ["public/*"]
        }
    }
}

Đối với dự án Vite

Nếu quý vị đang sử dụng Vite, quý vị cần thêm đoạn mã sau vào file vite.config.ts:

ts
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react-swc";
import * as path from "path";

export default defineConfig({
    plugins: [react()],
    resolve: {
        alias: [
            {
                find: "@",
                replacement: path.resolve(__dirname, "src"),
            },
            {
                find: "@/components",
                replacement: path.resolve(__dirname, "src/app/components"),
            },
            {
                find: "@/public",
                replacement: path.resolve(__dirname, "public"),
            }
        ],
    },
});

Kết luận

Tuy nhiên một số trường hợp, các plugin trong node_modules sử dụng @ làm prefix cho các module của chúng ít nhiều sẽ gây ra xung đột với cấu hình này. Trong trường hợp đó, quý vị cần thay đổi prefix khác cho cấu hình của mình như ~ hoặc #.

Nguyen Pham

Nguyen Pham

Làm việc tại phòng thí nghiệm MADE, Texas, USA. Là một người đam mê với công nghệ và thích chia sẻ kiến thức với mọi người.

Nguyen Pham — là nhà phát triển và thiết kế giàu kinh nghiệm tập trung vào WordPress, NextJS, Angular. Hãy xem một số dự án chúng tôi đã thực hiện và các sản phẩm nội bộ của chúng tôi.
Liên kết
Made by VueJS and Vercel Cloud· All rights reserved.