Khái niệm
@aws/nx-plugin là một plugin Nx cung cấp bộ công cụ để xây dựng và triển khai các ứng dụng full-stack trên AWS. Nó cung cấp cho bạn một bộ sưu tập các Generators để scaffold mã ứng dụng sẵn sàng cho production và hạ tầng để triển khai nó — type-safe, có thể chạy cục bộ và sẵn sàng để ship.
Thay vì bắt đầu từ một trang trống, bạn (hoặc AI agent của bạn) chọn các thành phần bạn cần — API, website, xác thực, AI agent, hạ tầng — cung cấp một vài tùy chọn cấu hình, và plugin sẽ tạo mã khởi đầu theo best practice. Nó thậm chí còn kết nối các dự án với nhau cho bạn (bao gồm cập nhật các file hiện có thông qua AST transforms) để tạo ra các client type-safe giữa frontend và backend của bạn.
Được xây dựng trên Nx và các generator của nó
Phần tiêu đề “Được xây dựng trên Nx và các generator của nó”Nx là một framework build thông minh để quản lý monorepo. Nó không phụ thuộc vào ngôn ngữ, cho phép TypeScript, Python, hạ tầng và nhiều thứ khác cùng tồn tại và build cùng nhau trong một workspace duy nhất. Hệ thống build của nó sử dụng caching và phân tích đồ thị phụ thuộc để chỉ rebuild những gì đã thay đổi và chạy các task song song, giữ cho testing, linting và building nhanh chóng khi workspace của bạn phát triển.
Mọi chức năng trong @aws/nx-plugin đều được cung cấp dưới dạng một Nx Generator — scaffolding tự động tạo ra các cấu trúc mã nhất quán từ các template được định nghĩa trước. Generator có thể được gọi thông qua Nx CLI, Nx Console IDE plugin, hoặc bởi AI assistant của bạn thông qua Nx Plugin for AWS MCP Server.
Bởi vì mọi thành phần đều là một generator, bạn chỉ thêm những gì bạn cần, khi bạn cần. Bắt đầu với một API, thêm một website sau, kết nối chúng khi bạn sẵn sàng — mỗi bước chỉ là một lệnh duy nhất.
Xây dựng với các framework đã được chứng minh
Phần tiêu đề “Xây dựng với các framework đã được chứng minh”@aws/nx-plugin cố ý tránh xây dựng các abstraction tùy chỉnh trên các công cụ bạn đã biết. Thay vì phát minh ra các framework, runtime hoặc wrapper riêng biệt, nó scaffold mã idiomatic sử dụng các dự án open-source đã được thiết lập và được áp dụng rộng rãi. Điều này có nghĩa là các kỹ năng hiện có của bạn được chuyển giao trực tiếp, bạn có thể dựa vào tài liệu chính thức cho mỗi framework, và bạn không bao giờ bị khóa vào một lớp mà chỉ plugin này hiểu.
Mã được tạo ra đứng trên vai của các framework tốt nhất trong lớp, bao gồm:
Giá trị của plugin nằm ở cách các phần này được cấu hình và kết nối với nhau cho AWS — không phải thay thế chúng.
Mở để chỉnh sửa
Phần tiêu đề “Mở để chỉnh sửa”Tất cả mã được tạo ra là mã của bạn. @aws/nx-plugin là một công cụ build-time, không phải là một dependency runtime — một khi generator đã chạy, plugin không còn trong bức tranh nữa. Bạn có thể đọc mọi file nó tạo ra, commit nó và thay đổi nó theo cách bạn muốn.
Điều này có nghĩa là:
- Không có escape hatch. Không có bề mặt cấu hình độc quyền nào để học hoặc vật lộn khi bạn cần làm điều gì đó mà generator không dự đoán trước. Bạn chỉnh sửa mã được tạo ra trực tiếp, giống như cách bạn chỉnh sửa bất kỳ mã nào bạn tự viết.
- Không có lớp abstraction mới. Generator phát ra mã idiomatic thuần túy cho các framework cơ bản. Không có wrapper API hoặc indirection ma thuật nào nằm giữa bạn và React, tRPC, FastAPI, CDK hoặc bất kỳ công cụ nào khác — những gì bạn thấy là những gì chạy.
- Plugin không phải là một dependency. Nó tạo mã và rời khỏi đường. Ứng dụng của bạn không import hoặc dựa vào
@aws/nx-plugintại runtime, vì vậy bạn không bao giờ bị chặn bởi nó và không bao giờ bị khóa.
Nếu bạn không thích điều gì đó trong mã được tạo ra, bạn có thể tự do sửa đổi nó. Generator cho bạn một khởi đầu tốt, không phải một cái lồng.
Đồng bộ với các cải tiến
Phần tiêu đề “Đồng bộ với các cải tiến”Sở hữu mã của bạn thường đi kèm với một chi phí: ngay khi bạn bắt đầu chỉnh sửa một scaffold, bạn bị cắt đứt khỏi các bản sửa lỗi và cải tiến được thực hiện ở upstream. Áp dụng chúng lại có nghĩa là đọc changelog, tạo lại và đối chiếu diff bằng tay. Migration là cách @aws/nx-plugin hoạt động để ngăn điều đó xảy ra.
Các bản phát hành đi kèm với migration, nhằm mục đích đưa mã mà các generator trước đó tạo ra đồng bộ với các cải tiến mà chúng tôi đã thực hiện kể từ đó. Khi chúng tôi sửa một bug, tăng cường một cài đặt bảo mật mặc định hoặc tinh chỉnh một pattern được tạo ra, việc chạy nx migrate áp dụng thay đổi đó vào mã của bạn, tại chỗ — thay vì để bạn phải phát hiện nó trong changelog và tự chuyển nó sang.
Trong thực tế:
- Nâng cấp được tự động hóa, không phải là một bài tập áp dụng lại. Một workspace được tạo ra cách đây nhiều tháng có thể tiến về phía trước với plugin thay vì trôi xa hơn khỏi nó.
- Các tùy chỉnh được khớp mẫu, không bị ghi đè. Migration kiểm tra xem một file vẫn khớp với hình dạng mà generator tạo ra. Khi nó đã phân kỳ vượt quá những gì chúng có thể cập nhật một cách an toàn, chúng để mã của bạn yên và báo cáo các bước tiếp theo thủ công thay thế.
- Một số thay đổi đến dưới dạng prompt cho agent. Khi chỉnh sửa đúng phụ thuộc vào những gì bạn đã xây dựng, migration là một prompt mà AI coding agent của bạn áp dụng thay vì một codemod.
- Nâng cấp là opt-in. Không có gì trong workspace của bạn thay đổi cho đến khi bạn chọn chạy
nx migrate.
Migration thu hẹp khoảng cách thay vì đóng nó lại: mã của bạn đã di chuyển bao xa quyết định chúng có thể làm được bao nhiêu, và một số bước vẫn sẽ cần tay bạn.
Phụ thuộc tối thiểu
Phần tiêu đề “Phụ thuộc tối thiểu”@aws/nx-plugin cố gắng giữ số lượng phụ thuộc toàn cục ở mức tối thiểu. Những gì bạn cần để bắt đầu phụ thuộc vào các generator mà bạn gọi.
Ví dụ, bất kỳ generator dựa trên TypeScript nào sẽ chỉ yêu cầu cài đặt Node. Đối với các dự án dựa trên Python, UV là yêu cầu duy nhất.
An toàn kiểu
Phần tiêu đề “An toàn kiểu”@aws/nx-plugin sử dụng type-safety để đơn giản hóa trải nghiệm của nhà phát triển thông qua các gợi ý hoàn thành trong IDE, đồng thời loại bỏ các lỗi runtime mà nếu không sẽ chỉ xuất hiện trong triển khai không type-safe. Do đó, tất cả các thành phần được cung cấp đều là type-safe theo mặc định.
Type safety chảy qua các ranh giới dự án: khi bạn kết nối một website với một API, client được tạo ra chia sẻ các type với backend, vì vậy một thay đổi đối với API contract xuất hiện dưới dạng lỗi compile-time trong frontend của bạn thay vì một bug trong production. Refactor với sự tự tin.