Skip to content

Hệ thống Build

Monorepo được điều phối bởi Makefile ở thư mục gốc (~750 dòng). Tất cả các tác vụ build, lint, dev, deploy và database đều được thực hiện thông qua nó.

Chạy make help để xem danh sách target đầy đủ.

Đồ thị Phụ thuộc Package

make build chạy build-3rd trước, sau đó là build-packages theo thứ tự ở trên.

Cài đặt

TargetLệnhMục đích
make installbun install + cài đặt gateway portalCài đặt tất cả dependencies của workspace
make cleanbun run --filter "*" cleanXóa dist/ từ tất cả các package
make purgefind . -name node_modules -exec rm -rfXóa tất cả node_modules (lựa chọn triệt để)
make setup-toolsgit config core.hooksPath .githooksBật git hooks của project
make rebuildpurge → clean → install → buildRebuild sạch hoàn toàn từ đầu

Target Build

Tổng hợp

TargetBuild cái gì
make buildMọi thứ (alias của build-all)
make build-allbuild-3rd rồi build-packages
make build-packagesTất cả packages/* theo thứ tự phụ thuộc
make build-3rdTất cả third-parties/* (iiapi, mq-pay, mq-sms, t-van)

Package riêng lẻ

Mỗi target tự động build các phụ thuộc của nó trước (qua các prerequisite của Makefile).

TargetPhụ thuộcPackage
make core@nx/core
make assetcore@nx/asset
make searchcore@nx/search
make identitycore, mq-sms@nx/identity
make inventorycore@nx/inventory
make financecore@nx/finance
make outreachcore@nx/outreach
make ledgercore, asset@nx/ledger
make pricingcore@nx/pricing
make taxationcore@nx/taxation
make commerceasset, search@nx/commerce
make salecore@nx/sale
make paymentcore, mq-pay@nx/payment
make signalcore@nx/signal
make licensingcore@nx/licensing

Third-parties

TargetPackage
make iiapi@nx/iiapi
make mq-pay@nx/mq-pay
make mq-sms@nx/mq-sms
make t-van@nx/t-van

App Frontend

TargetPackage
make bo@nx-app/bo
make client@nx-app/client
make overture@nx-app/overture
make app-core@nx-app/core

Các build frontend chạy bun run apps:rebuild trước (build lại các thư viện app dùng chung), sau đó là build riêng cho app.

Cơ chế Build Bên trong Mỗi Package

Mỗi package backend đều có script build giống hệt nhau:

bash
bun run rebuild     # → scripts/rebuild.sh → clean.sh + compile.sh
bun run build       # → scripts/build.sh
bun run compile     # → scripts/compile.sh (tsc + tsc-alias)
bun run clean       # → scripts/clean.sh (rm -rf dist/)

Luôn dùng bun run rebuild hoặc make <pkg>

Đừng bao giờ gọi tsc hay npx trực tiếp. Build sử dụng tsc-alias để giải quyết các path alias như @/services thành đường dẫn tương đối trong output đã biên dịch. tsc thuần sẽ tạo ra các import bị hỏng.

Compile (Binary Độc lập)

Bun có thể biên dịch các dịch vụ thành các file thực thi đơn:

TargetBuild trướcOutput
make compile-commercecommercepackages/commerce/dist/bin/
make compile-financefinancepackages/finance/dist/bin/
make compile-identityidentitypackages/identity/dist/bin/
make compile-inventoryinventorypackages/inventory/dist/bin/
make compile-paymentpaymentpackages/payment/dist/bin/
make compile-pricingpricingpackages/pricing/dist/bin/
make compile-salesalepackages/sale/dist/bin/
make compile-signalsignalpackages/signal/dist/bin/
make compile-ledgerledgerpackages/ledger/dist/bin/
make compile-licensinglicensingpackages/licensing/dist/bin/
make compile-outreachoutreachpackages/outreach/dist/bin/

Docker

Build Docker image để triển khai:

bash
# Phiên bản hiện tại
make docker pkg=identity

# Tăng phiên bản patch (0.0.1 → 0.0.2) rồi build
make docker pkg=identity v=patch

# Đặt phiên bản cụ thể
make docker pkg=identity v=0.2.0

# Tăng prerelease (0.0.1 → 0.0.1-1)
make docker pkg=identity v=pre

# Build chỉ với tag (không thay đổi package.json)
make docker pkg=identity tag=0.0.1-2

# Build TẤT CẢ image
make docker-all

Tên package có sẵn: identity, commerce, sale, finance, inventory, ledger, payment, pricing, signal.

Script build nằm tại scripts/build-docker.sh. Image được push lên container registry của project.

Lint

TargetPhạm vi
make lintMọi thứ (alias của lint-all)
make lint-alllint-apps + lint-packages + lint-3rd + lint-docs
make lint-appsTất cả apps/*
make lint-packagesTất cả packages/*
make lint-3rdTất cả third-parties/*
make lint-docsTất cả docs/*
make lint-wikiChỉ @nexpando/eventry-docs
make lint-packages-fixTự động sửa tất cả package
make lint-<package>Một package (ví dụ lint-identity, lint-commerce)
make lint-app-<app>Một app (ví dụ lint-app-client, lint-app-bo)

Dùng --elide-lines=0 để có output chi tiết (Makefile đã làm điều này cho các target lint-packagesdev-*).

Dev Server

TargetDịch vụCổng
make dev-identityIdentity31010
make dev-commerceCommerce31020
make dev-saleSale31030
make dev-financeFinance31040
make dev-inventoryInventory31050
make dev-ledgerLedger31060
make dev-pricingPricing31070
make dev-paymentPayment31080
make dev-signalSignal31090
make dev-outreachOutreach31110
make dev-taxationTaxation31130
make dev-boBack Office5174
make dev-clientAdmin Dashboard5173
make dev-overtureMarketing Site4321
make dev-portalGateway Portal
make dev-wikiTài liệu này5175

Cơ sở Dữ liệu

TargetCách dùng
make db-generate schema=<name>Tạo SQL migration cho một schema
make db-generate-allTạo migration cho tất cả 8 schema
make db-migrate schema=<name>Áp dụng migration cho một schema
make db-migrate-allÁp dụng migration cho tất cả schema
make db-migrate-package-dev package=<name>Chạy migration mức package ở chế độ dev
make db-migrate-ledger-devLối tắt cho migration ledger ở dev

Tên schema: public, pricing, allocation, sale, inventory, finance, payment, ledger

Các lệnh database chạy trong packages/core — nơi sở hữu các định nghĩa schema Drizzle ORM dùng chung.

Deploy (Dev Server)

TargetTriển khai
make deploy-dev-depsCác phụ thuộc hạ tầng
make deploy-dev-gatewayTraefik gateway
make deploy-dev-backend-servicesTất cả các dịch vụ backend (identity tới licensing)
make deploy-dev-<service>Dịch vụ riêng lẻ (ví dụ deploy-dev-identity)
make deploy-dev-clientAdmin dashboard
make deploy-dev-boBack office
make deploy-dev-overtureMarketing site
make deploy-dev-wikiTài liệu
make deploy-dev-prototypesPrototype thiết kế

Script deploy nằm trong infrastructure/deployments/develop/scripts/.

Benchmark

TargetMục đích
make benchmark-ledgerChạy benchmark tạo PDF + XLSX cho cả 6 loại ledger

Git Hooks

TargetMục đích
make setup-toolsCấu hình git để dùng .githooks/
make pre-commitChạy tất cả các kiểm tra lint (dùng bởi pre-commit hook)

Trang Liên quan

TrangMô tả
Bắt đầuHướng dẫn cài đặt lần đầu
Tham khảo Biến Môi trườngTất cả biến môi trường
Quy trình GitĐặt tên nhánh, commit, MR

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.