- Công cụ CLI giúp build thư viện TypeScript sang ESM/CJS một cách dễ dàng mà không cần bundler
- Bắt đầu như công cụ build nội bộ của Zod, hiện đã mở rộng thành công cụ phổ quát cho mọi thư viện TypeScript
- Sử dụng tsc (TypeScript compiler), với khả năng rewrite extension, build module kép, tự động tạo exports, hỗ trợ build production ngay cả khi không dùng bundler
- Phù hợp cho triển khai nhanh và tự động hóa CI/CD, và được khuyến nghị mạnh khi cần dựng gói dạng thư viện (triển khai ESM/CJS đồng thời)
- Tự động hóa khai báo kiểu/exports/bin giúp giảm thiểu lỗi trong bảo trì/triển khai
Đặc điểm và chức năng chính
- Build module kép: Tạo cùng lúc file ESM(.js) và CJS(.cjs)
- Không cần bundler/thiết lập riêng: Hoạt động mà không cần webpack, esbuild, rollup..., chỉ cần
package.json và tsconfig.json
- Quản lý entrypoint theo khai báo: Chỉ định trực tiếp entrypoint, subpath, wildcard tại
package.json#/zshy
- Tự động tạo exports: Sau khi build, tự động cập nhật trường
"exports" trong package.json
- Tự do cấu trúc file: Không bắt buộc cấu trúc src/out cố định, import extension cũng được dùng linh hoạt
- Xử lý asset: Tự động sao chép cả file không phải JS
- Hỗ trợ .tsx: Chuyển đổi theo tsconfig sang .js/.cjs/.mjs v.v.
- Hỗ trợ CLI: Khi chỉ định entrypoint bin, tự động tạo
package.json#/bin
- Có thể chậm hơn: Tập trung vào kiểm tra kiểu và chuyển đổi của tsc, ưu tiên độ tin cậy/chính xác hơn tốc độ build
Nguyên lý hoạt động chính và điểm khác biệt
- Tự động rewrite extension (.js/.cjs/.mjs) và đường dẫn import bằng TypeScript Compiler API
- Tạo đồng thời file ESM/CJS và khai báo kiểu (.d.ts/.d.cts) cho mỗi entrypoint
- Hỗ trợ entrypoint bin cho CLI: zshy tự động ghi đường dẫn vào package.json#/bin và hỗ trợ shebang khi cần
- Tự do cấu trúc file, chỉ cần chỉ định outDir trong tsconfig
- package.json#/exports được tự động tạo và ghi đè khi build
Tính năng nâng cao và tương thích
- Hỗ trợ wildcard/subpath: Có thể khai báo đường dẫn như
./plugins/*, tự động build cho mọi subpath trong thư mục src
- Tuân thủ hầu hết tuỳ chọn tsconfig.json (một số tuỳ chọn liên quan module được override cho mỗi build CJS/ESM)
- Cho phép code không có extension import (
from "./utils" v.v.), tự động hiệu chỉnh extension khi build
- Môi trường React Native/legacy cũng hỗ trợ bằng flat build mode (xuất output về root gói, truy cập qua index.js mà không cần exports)
- Hỗ trợ exports condition tuỳ chỉnh (
sourceDialects): cho phép chỉ định thêm các điều kiện như source
Ưu điểm so với công cụ cạnh tranh
- Khác với tshy/tsup/tsdown, thay vì tạo thư mục/phần đệm gói riêng, gom toàn bộ kết quả build vào một outDir duy nhất
- Tận dụng API chính thức của TypeScript, tối đa hóa khả năng tương thích với xu hướng chuẩn mới nhất của Node.js/ESM/CJS/TS
- Không cần config bổ sung, không cần bundler, chỉ một lệnh để phát hành package TypeScript cấp library
Chưa có bình luận nào.