Các 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 tạo ra mã ứng dụng theo các phương pháp hay nhất và cơ sở hạ tầng để triển khai nó — an toàn về kiểu, có thể chạy cục bộ và có thể triển khai ngay từ đầu, đưa bạn đến gần hơn với production.
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, cơ sở hạ tầng — cung cấp một vài tùy chọn cấu hình, và plugin sẽ tạo ra mã khởi đầu theo các phương pháp hay nhất. Nó thậm chí còn kết nối các dự án với nhau cho bạn (bao gồm cả việc cập nhật các tệp hiện có thông qua các phép biến đổi AST) để tạo ra các client an toàn về kiểu 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 xây dựng thông minh để quản lý monorepo. Nó không phụ thuộc vào ngôn ngữ, cho phép TypeScript, Python, cơ sở hạ tầng và nhiều thứ khác cùng tồn tại và xây dựng trong một workspace duy nhất. Hệ thống xây dựng của nó sử dụng bộ nhớ đệm và phân tích đồ thị phụ thuộc để chỉ xây dựng lại những gì đã thay đổi và chạy các tác vụ song song, giữ cho việc kiểm thử, linting và xây dựng 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 Generator của Nx — tự động tạo scaffold tạo ra các cấu trúc mã nhất quán từ các template được định nghĩa trước. Các generator có thể được gọi thông qua Nx CLI, plugin IDE Nx Console, hoặc bởi trợ lý AI 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 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 đặc biệt, nó tạo scaffold mã theo cách thức tự nhiên sử dụng các dự án mã nguồn mở được thiết lập và á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 từng framework, và bạn không bao giờ bị khóa vào một lớp mà chỉ plugin này hiểu được.
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 trong việc thay thế chúng.
Mở để sửa đổi
Phần tiêu đề “Mở để sửa đổi”Tất cả mã được tạo ra là mã của bạn. @aws/nx-plugin là một công cụ thời gian xây dựng, không phải là một phụ thuộc 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 tệp 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ó cửa thoát hiểm. Không có bề mặt cấu hình độc quyền để 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. Các generator phát ra mã đơn giản, theo cách thức tự nhiên cho các framework cơ bản. Không có API wrapper hoặc lớp gián tiếp 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 phụ thuộc. Nó tạo ra mã và rời khỏi con đườ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 vào.
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ó. Các 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 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 các 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 chúng tôi đã thực hiện kể từ đó. Khi chúng tôi sửa một lỗi, tăng cường một mặc định bảo mật 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ó qua.
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 lên 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 pattern, không bị ghi đè. Các migration kiểm tra xem một tệp 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 các prompt cho agent. Khi việc 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à tùy chọn. Không có gì trong workspace của bạn thay đổi cho đến khi bạn chọn chạy
nx migrate.
Các 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 bạn gọi.
Ví dụ, bất kỳ generator dựa trên TypeScript nào sẽ chỉ yêu cầu Node được cài đặt. Đối với các dự án dựa trên Python, UV là yêu cầu duy nhất.
An toàn về kiểu
Phần tiêu đề “An toàn về kiểu”@aws/nx-plugin sử dụng tính an toàn về kiểu để đơn giản hóa trải nghiệm nhà phát triển thông qua các gợi ý hoàn thành IDE, đồng thời loại bỏ các lỗi runtime mà nếu không sẽ chỉ xuất hiện trong một triển khai không an toàn về kiểu. Do đó, tất cả các thành phần được cung cấp đều an toàn về kiểu theo mặc định.
Tính an toàn về kiểu 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 kiểu với backend, vì vậy một thay đổi đối với một API contract xuất hiện dưới dạng lỗi thời gian biên dịch trong frontend của bạn thay vì một lỗi trong production. Refactor với sự tự tin.