Chủ Nhật, 10/03/2019 | 00:00 GMT+7

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ư frontendbackend 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! 💪


Tags:

Các tin liên quan