Tuỳ chỉnh không gian làm việc của IDX

Mục tiêu của Project IDX là giúp ích cho các nhà phát triển nhất có thể. Một cách để IDX thực hiện được việc này là mang lại cho nhà phát triển sự tự do và linh hoạt khi cài đặt các công cụ phù hợp cho mọi dự án cụ thể trên không gian làm việc của họ, đồng thời tuỳ chỉnh các chế độ cài đặt để không gian làm việc phù hợp với họ.

Nix và IDX

IDX sử dụng Nix để xác định cấu hình môi trường cho từng không gian làm việc. Nix là một trình quản lý gói có chức năng thuần tuý và gán giá trị nhận dạng duy nhất cho từng phần phụ thuộc, nghĩa là môi trường của bạn có thể chứa một cách liền mạch nhiều phiên bản của cùng một phần phụ thuộc. Mẫu này cũng có tính tái tạo và mang tính khai báo. Trong ngữ cảnh của IDX, điều này có nghĩa là bạn có thể chia sẻ tệp cấu hình Nix của mình trên các không gian làm việc để tải cùng một cấu hình môi trường.

IDX xác định môi trường xem trước và các cấu hình gói không gian làm việc trực tiếp từ kho lưu trữ mã bằng tệp .idx/dev.nix. Các thuộc tính và thư viện gói mà bạn có thể xác định trong tệp này sẽ tuân theo cú pháp tập hợp thuộc tínhNix.

Ví dụ sau đây cho thấy cấu hình môi trường cơ bản cho phép xem trước:

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Các thuộc tính Nix và thư viện gói

gói hàng

Các gói sẽ cài đặt trong môi trường.

Bạn có thể sử dụng đối số pkgs để chọn các gói cần cài đặt, tức là pkgs.python3. Xin lưu ý rằng nội dung của pkgs phụ thuộc vào tuỳ chọn kênh channel đã chọn.

Ví dụ:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

Bạn có thể tìm các gói hiện có tại đây: stable-23.11 hoặc unstable (không ổn định).

Loại: danh sách gói

Mặc định: [ ]

kênh

nixpkgs để sử dụng.

Kênh này xác định nội dung của đối số pkgs.

Loại: một trong các giá trị "stable-23.05", "stable-23.11", "unstable" (không ổn định)

Mặc định: "stable-23.11"

env

Các biến môi trường được đặt bên trong môi trường của nhà phát triển.

Các mã này được truyền đến tất cả các shell và máy chủ xem trước. Biến môi trường có thể đặc biệt hữu ích nếu ứng dụng của bạn đòi hỏi một tập hợp các biến cụ thể.

Ví dụ:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Type: là tập hợp thuộc tính của mọi thứ

Mặc định: { }

idx.extensions

Tiện ích mã bạn muốn cài đặt trong không gian làm việc IDX của mình.

Đây là danh sách mã tiện ích đủ điều kiện, tức là ${publisherId}.${extensionId}.

Bạn có thể tìm thấy danh sách các tiện ích có sẵn trong Mở VSX Registry (Mở sổ đăng ký VSX) rồi nhập các tiện ích đó vào tệp dev.nix chậm nhất vào ${publisherId}.${extensionId}.

Loại: danh sách (chuỗi hoặc đường dẫn không trống)

Mặc định: [ ]

idx.previews.enable

Đặt giá trị này thành true để bật bản xem trước IDX.

Tính năng này giúp bạn tự động chạy và tải lại ứng dụng trong quá trình phát triển.

Loại: boolean

Mặc định: true

Ví dụ: true

idx.previews.previews

Xem trước cấu hình.

Xác định các lệnh mà IDX sẽ thực thi trong môi trường nhà phát triển của bạn.

Ví dụ:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

Tập hợp thuộc tính Type: của (mô-đun con)

Mặc định: { }

idx.previews.previews.*.command

Lệnh thực thi

Loại: danh sách chuỗi

Mặc định: [ ]

idx.previews.previews.*.cwd

Thư mục đang hoạt động

Loại: chuỗi

Mặc định: ""

idx.previews.previews.*.env

Các biến môi trường cần đặt.

Loại: tập hợp thuộc tính chuỗi

Mặc định: { }

idx.previews.previews.*.manager

Nhà quản lý

Loại: một trong số web, flutter

idx.workspace.onCreate

Các lệnh cần thực thi khi không gian làm việc được tạo và mở lần đầu tiên.

Việc này có thể hữu ích khi thiết lập môi trường phát triển. Chẳng hạn ở đây, chúng ta đang chỉ định npm install để chạy:

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
  };
}

Loại: tập hợp thuộc tính (đường dẫn hoặc chuỗi)

Mặc định: { }

idx.workspace.onStart

Các lệnh cần thực thi bất cứ khi nào không gian làm việc được mở.

Điều này có thể hữu ích khi bắt đầu theo dõi quá trình xây dựng. Chẳng hạn ở đây, chúng tôi chỉ định 2 lệnh để chạy:

{pkgs, ...}: {
  idx.workspace.onStart = {
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Loại: tập hợp thuộc tính (đường dẫn hoặc chuỗi)

Mặc định: { }

services.docker.enable

Liệu có bật Rootless Docker hay không.

Loại: boolean

Mặc định: false

Ví dụ: true