Cấu trúc dự án và công nghệ sử dụng

Điều kiện tiên quyết

Trước khi đọc trang này, vui lòng đảm bảo bạn đã chạy được Portal đầu tiên theo Bắt đầu nhanh với AI Portal.

Phần lớn công việc phát triển hằng ngày cứ giao cho AI là được. Tuy nhiên khi hiểu qua cấu trúc của template, bạn sẽ đánh giá được code AI viết có đặt đúng chỗ không, và gặp vấn đề cũng dễ khoanh vùng hơn.

Công nghệ sử dụng

Template Portal dựa trên @nocobase/portal-template-default, mã nguồn nằm tại nocobase/portal-template-default.

Công nghệCông dụng
React 19 + TypeScriptFramework frontend
ViteDịch vụ phát triển và công cụ build
RefineFramework tầng dữ liệu, xử lý resource, route, biểu mẫu và quyền
Tailwind CSS 4Giải pháp style
shadcn/uiNền component, mã nguồn thuộc về dự án
lucideThư viện icon
pnpmTrình quản lý package

Bộ kết hợp này là stack frontend mà AI hiện quen thuộc nhất, nhờ đó AI viết ra có độ chính xác cao hơn.

Portal hiện là một dự án frontend thuần túy, logic nghiệp vụ được hoàn thành qua API, component chuẩn... của NocoBase. Sau này sẽ hỗ trợ để AI Agent viết cả code backend của Portal.

Cấu trúc thư mục

src/
├── app/            Route và nạp extension
├── pages/          Đăng nhập, đăng ký, quên mật khẩu...
├── components/     Component
│   ├── ui/         Nền component shadcn/ui
│   ├── app-shell/  Bố cục, điều hướng, trạng thái loading
│   ├── auth/       Component liên quan đến xác thực
│   └── ...
├── extensions/     Extension, cài xong là dùng được
├── lib/            Phần đóng gói client NocoBase và logic ACL
├── providers/      Các provider của Refine
├── hooks/          Hook tùy chỉnh
└── locales/        Nội dung đa ngôn ngữ

Vài vị trí quan trọng:

  • src/app/routes.tsx — Cấu trúc route. Route cho trạng thái đã đăng nhập và chưa đăng nhập tách riêng, route do extension cung cấp sẽ tự động được gắn vào
  • src/app/extensions.tsx — Logic nạp extension, dùng import.meta.glob để quét src/extensions/*/extension.tsx
  • src/providers/data.ts — data provider của Refine, dịch cú pháp truy vấn của Refine thành tham số API của NocoBase
  • src/lib/nocobase/client.tsNocoBaseClient, lớp đóng gói bên dưới của mọi request
  • src/components/ui/ — Hơn 60 component shadcn/ui, dùng trực tiếp là được

Trang nghiệp vụ thường được viết dưới src/extensions/, mỗi module chức năng một thư mục. Chi tiết xem Component chuẩn và mở rộng.

File quan trọng

FileVai trò
AGENTS.mdQuy ước phát triển dành cho AI Agent, bạn cũng có thể bổ sung quy tắc riêng của dự án vào đây
components.jsonCấu hình shadcn/ui, gồm phong cách style, thư viện icon và alias đường dẫn
.env / .env.localBiến môi trường, nb portal devdeploy sẽ tự động làm mới
vite.config.tsCấu hình build, bao gồm proxy API khi phát triển

Biến môi trường

BiếnMô tả
NOCOBASE_API_URLĐịa chỉ gốc của REST API NocoBase, bắt buộc có hậu tố /api. Triển khai cùng origin thường là /api
NOCOBASE_PORTAL_BASEĐường dẫn công khai nơi Portal được gắn vào. Phát triển cục bộ dùng /, khi build dùng đường dẫn triển khai thực tế, ví dụ /x/main/
NOCOBASE_AUTHENTICATORTên authenticator, mặc định là basic
NOCOBASE_API_TOKENToken tạm dùng khi phát triển, đừng commit giá trị thật
API_CLIENT_STORAGE_PREFIXTiền tố lưu token, nếu phía server đã tùy chỉnh thì phải giữ nhất quán
API_CLIENT_STORAGE_TYPECách lưu token, mặc định là localStorage
API_CLIENT_SHARE_TOKENCó chia sẻ token hay không, mặc định là false

Mấy biến này nb portal devnb portal deploy sẽ tự động ghi sẵn, thường không cần sửa tay. Chỉ khi phía server tùy chỉnh cách lưu trữ thông tin xác thực thì mới cần chỉnh ba biến cuối cho khớp.

Khi phát triển, nếu NOCOBASE_API_URL điền địa chỉ tuyệt đối, Vite sẽ tự cấu hình một proxy để chuyển tiếp request, bạn không phải tự xử lý CORS.

Lệnh thường dùng

Phát triển hằng ngày chỉ dùng tới chừng này lệnh; việc cài dependency, làm mới biến môi trường, build đều do CLI xử lý phía sau:

LệnhVai trò
nb portal listXem ứng dụng hiện tại có những Portal nào
nb portal info <portal>Tra đường dẫn phát triển, đường dẫn triển khai và địa chỉ truy cập của Portal
nb portal create <portal>Tạo workspace phát triển cho một Portal mới dựa trên template
nb portal pull <portal>Kéo mã nguồn Portal từ remote về workspace phát triển cục bộ
nb portal dev <portal>Khởi động dịch vụ phát triển cục bộ, sửa code thấy kết quả ngay
nb portal push <portal>Đẩy thay đổi mã nguồn cục bộ lên remote
nb portal deploy <portal>Build và triển khai, để thay đổi có hiệu lực với người dùng
nb portal config <portal>Điều chỉnh source storage, cấu hình Git và đường dẫn workspace phát triển
nb portal destroy <portal>Xóa bản ghi Portal và các file đã triển khai

Tham số đầy đủ của từng lệnh xem Tài liệu tham khảo lệnh nb portal.

Workspace phát triển nằm ở đâu

Workspace phát triển của Portal mặc định đặt trong thư mục nơi bạn chạy nb portal create hoặc nb portal pull:

./<portal>

Khi tạo hoặc kéo về, bạn có thể dùng --path để trỏ sang chỗ khác. Sản phẩm triển khai sau khi build nằm ở một vị trí khác, đặt dưới storage của ứng dụng đích, do nb portal deploy lo việc đồng bộ, bình thường bạn không phải quan tâm.

Không chắc workspace phát triển của Portal hiện tại nằm ở đâu thì tra thẳng:

nb portal info main

Liên kết liên quan