Corralling Monorepos với không gian làm việc sợi
Có thể không phải là ý kiến phổ biến nhất, nhưng tôi hoàn toàn thích monorepos . Khi bạn bắt đầu một dự án hoàn toàn mới, việc có một repo duy nhất và phát triển mọi thứ từ đó sẽ rất hợp lý. Thật không may, khi các dự án phát triển, mọi thứ có thể trở nên khó sử dụng. Điều tiếp theo bạn biết, mã back và front end đang chia sẻ các phụ thuộc và package.json
của bạn đã tăng lên vài trăm dòng! Đừng bao giờ lo sợ, không gian làm việc của sợi có thể giúp bạn chế ngự monorepo dã man.
Những gì không gian làm việc yarn
mang lại cho bảng là một cách dễ dàng để liên kết các monorepos của bạn với nhau, chia sẻ các phụ thuộc và thậm chí ghim các version khác nhau của cùng một phụ thuộc. Nó cũng cho phép bạn nhanh chóng cài đặt các phụ thuộc cho tất cả các dự án con của bạn bằng một lệnh yarn install
đơn.
Nếu bạn đến từ phương pháp tiếp cận dịch vụ vi mô với nhiều repository , có thể bạn đã quen thuộc với việc viết và xử lý các tập lệnh để bootstrap, kết nối và giữ cho các repository của bạn được kết nối và đồng bộ.
yarn workspaces
cho phép bạn thực hiện việc này một cách hiệu quả để bạn có thể tập trung thời gian vào những việc như viết mã thực sự!
Bắt đầu
Rõ ràng để sử dụng không gian làm việc yarn
bạn cần phải lắp đặt yarn
. Nếu không, vui lòng tham khảo Trang lắp đặt yarn
và làm theo hướng dẫn cho hệ thống cụ thể của bạn.
Nếu bạn đang làm việc với một repository hiện có mà bạn đang sử dụng npm
, tất cả những gì bạn cần làm là chạy yarn
trong repository lưu trữ. Thao tác này sẽ tạo ra file yarn.lock
và nhận mọi thứ để bạn sử dụng yarn
.
Đối với dự án hoàn toàn mới, chỉ cần yarn init
bên trong folder dự án của bạn và làm theo hướng dẫn!
Để cài đặt mọi thứ để trình diễn, tôi đã tạo một dự án hoàn toàn mới có tên là GatorFarm
với folder cho mã kết thúc trước và sau như sau:
$ mkdir -p GatorFarm/{backend,frontend}
$ cd GatorFarm
$ yarn init # Proceed through the prompts
Tạo không gian làm việc
Đối với tôi, vẻ đẹp của một monorepo nằm ở chỗ mọi thứ đều ở một nơi. Một repository để sao chép và bạn đã có mọi thứ mình cần.
Như đã đề cập, điều này trở nên thực sự phức tạp khi bạn có package.json
bao gồm các phần phụ thuộc được chia sẻ trên nhiều dự án con trong monorepo của bạn.
Điều này thậm chí còn trở nên khó khăn hơn khi bạn cần sử dụng một version cụ thể của một gói trong một dự án con nhưng muốn hoặc cần sử dụng một version khác ở nơi khác.
Để giúp tránh những loại vấn đề này, ta có thể coi các tiểu dự án riêng lẻ như một dự án của riêng chúng, với các phụ thuộc của chúng. Để làm như vậy, ta cần chạy yarn init
trong mỗi folder con mà ta đã tạo trước đó:
$ cd backend
$ yarn init # Proceed through the prompts
$ cd ../frontend
$ yarn init # And of course these prompts
$ cd ..
Nếu bạn chấp nhận các giá trị mặc định trong khi kết nối yarn init
, bạn sẽ có một dự án có tên là “backend” trong folder backend
và một dự án có tên là “frontend” trong folder frontend
.
Trường name
trong package.json
của bạn là những gì yarn
sử dụng để tạo không gian làm việc. Để tạo không gian làm việc, ta cần chỉnh sửa file package.json
trong folder root của dự án GatorFarm
:
$ vim package.json # Developer's choice of editor, obviously, Vim not required ;)
Và thêm thuộc tính workspaces
, với một mảng tên dự án con của ta . Nó trông giống như sau :
{
"name": "GatorFarm",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"private": true,
"workspaces": [
"backend",
"frontend"
]
}
Lưu ý thuộc tính private
cũng phải có mặt và được đặt thành true
. Các dự án sử dụng không gian làm việc không nghĩa là được xuất bản vì vậy nếu bạn không chỉ định điều này trong khi bắt đầu yarn init
bạn có thể làm như vậy ngay bây giờ.
Cài đặt phụ thuộc
Vì ta có package.json
trong mỗi folder dự án con của bạn , ta có thể thêm các phần phụ thuộc từ folder con cho từng dự án. Vì ta có một dự án con cho mã back end và front end, hãy thêm một số nghi ngờ thông thường của ta vào dự án back end:
$ cd backend
$ yarn add express uuid
$ cd ..
Ta có thể làm điều tương tự trong folder frontend
của ta . Ta thậm chí có thể ghim các phần phụ thuộc vào các số version khác nhau, ví dụ: ghim cùng một gói uuid
mà ta đã đưa vào backend
vào version cũ hơn trong frontend
:
$ cd frontend
$ yarn add react uuid@^2
$ cd ..
Nếu bạn cố gắng thêm một phụ thuộc vào root của không gian làm việc, bạn sẽ gặp phải sự phản đối từ yarn
. Tôi không ở đây để đánh giá, vì vậy nếu bạn thực sự muốn thêm phần phụ thuộc vào root của không gian làm việc / dự án của bạn , bạn có thể làm như vậy với đối số -W/--ignore-workspace-root-check
:
$ yarn add lint-staged -W
Liên kết các tiểu dự án
Ta đã đề cập đến việc thêm các phần phụ thuộc vào các dự án con của bạn , nhưng còn việc liên kết các dự án con của ta với nhau để mã được dùng lại thì sao?
Để liên kết các dự án con của ta , tất cả những gì bạn cần làm là thêm tên và version của dự án giống như bạn làm với bất kỳ dependencies nào khác:
$ cd backend
$ yarn add frontend@1.0.0
Hãy cảnh báo nếu bạn bỏ qua số version , bạn có nguy cơ bao gồm phụ thuộc bên ngoài từ NPM thay vì tiểu dự án local của ta .
Cũng cần lưu ý các tên chung chung như frontend
và backend
có thể gây khó chịu cho sự chồng chéo này với các gói npm, vì vậy có thể đáng để bạn đưa ra các quy ước đặt tên chung chung hơn: P
Một khởi đầu mới
Bây giờ ta có một dự án với hai tiểu dự án được cấu hình như một không gian làm việc yarn
. Vì ta đã thực hiện từng bước để bắt đầu và vận hành mọi thứ, bạn sẽ không thể trải nghiệm một trong những phần tốt nhất của không gian làm việc, cài đặt tất cả các phụ thuộc dự án và dự án con của bạn chỉ bằng một lệnh!
Bạn có thể commit và đẩy các thay đổi của bạn và sau đó sao chép một bản sao mới của repository của bạn nếu bạn muốn hoặc bạn chỉ có thể xóa các folder node_modules
khỏi root của dự án và từng dự án con của bạn.
Khi bạn đã có một bản sao rõ ràng của dự án của bạn , chỉ cần chạy yarn install
từ root của dự án và đắm mình trong vinh quang khi tất cả các phụ thuộc của bạn đang được cài đặt, trên nhiều dự án con, bằng một lệnh! 💪
Các tin liên quan