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, ví dụ: pkgs.python3. 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 kiế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 lựa chọn là "stable-23.05", "stable-23.11", "unstable"

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. Các biến môi trường có thể đặc biệt hữu ích nếu ứng dụng của bạn yêu cầu một tập hợp biến cụ thể.

Ví dụ:

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

Loại: 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, ví dụ: ${publisherId}.${extensionId}.

Bạn có thể tìm thấy danh sách các tiện ích có sẵn trong Mở Sổ đăng ký VSX rồi nhập các tiện ích đó vào tệp dev.nix của mình 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";
        };
      };
    };
  };
}

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

Mặc định: { }

idx.previews.previews.<name>.command

Lệnh thực thi

Loại: danh sách chuỗi

Mặc định: [ ]

idx.previews.previews.<name>.cwd

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

Loại: chuỗi

Mặc định: ""

idx.previews.previews.<name>.env

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

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

Mặc định: { }

idx.previews.previews.<name>.manager

Nhà quản lý

Loại: một trong các lựa chọn là "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. Ví dụ: ở đây chúng tôi sẽ chỉ định npm install để chạy:

{pkgs, ...}: {
  idx.workspace.
    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. Ví dụ: ở đây, chúng tôi chỉ định 2 lệnh để chạy:

{pkgs, ...}: {
  idx.workspace.
    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

services.mysql.enable

Liệu có bật máy chủ MySQL hay không.

Máy chủ được khởi chạy bằng thư mục gốc của người dùng mà không cần mật khẩu. Vì vậy, để tạo thêm người dùng và tạo cơ sở dữ liệu, hãy sử dụng mysql -u root. .

Loại: boolean

Mặc định: false

Ví dụ: true

services.mysql.package

Gói MySQL để sử dụng.

Loại: gói

Mặc định: pkgs.mysql

Ví dụ: pkgs.mysql80

services.postgres.enable

Liệu có bật máy chủ PostgreSQL hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.postgres.package

Gói PostgreSQL để sử dụng.

Loại: gói

Mặc định: pkgs.postgresql

Ví dụ: pkgs.postgresql_15

services.postgres.extensions

Tiện ích Postgres để cài đặt.

"sqla_sqls" "sqla_sqls" "sqla_sql"" và "chương trình_" "

Mặc định: [ ]

Ví dụ: [ "pgvector" "postgis" ];

services.pubsub.enable

Xem có bật trình mô phỏng Google Pub/Sub hay không.

Bạn có thể tìm thêm tài liệu về cách sử dụng trình mô phỏng tại đây: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Loại: boolean

Mặc định: false

Ví dụ: true

services.pubsub.port

Thiết lập cổng Pub/Sub sẽ bật.

Loại: Số nguyên 16 bit chưa ký; từ 0 đến 65535 (bao gồm cả hai giá trị này)

Mặc định: 8085

Services.pubsub.project-id

Mã dự án cần dùng để chạy trình mô phỏng Pub/Sub. Dự án này chỉ dành cho mục đích thử nghiệm, không nhất thiết phải tồn tại và chỉ dùng trên máy.

Loại: chuỗi khớp với mẫu [a-z][a-z0-9-]{5,29}

Mặc định: "idx-pubsub-emulator"

services.redis.enable

Liệu có bật máy chủ Redis hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.redis.port

Định cấu hình cổng mà Redis sẽ lắng nghe.

Theo mặc định, tcp bị tắt và redis chỉ nghe trên /tmp/redis/redis.sock.

Loại: Số nguyên 16 bit chưa ký; từ 0 đến 65535 (bao gồm cả hai giá trị này)

Mặc định: 0

services.spanner.enable

Xem có bật Trình mô phỏng Google Cloud Spanner hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.spanner.fault-injection

Liệu có bật tính năng chèn lỗi ngẫu nhiên vào các lượt chuyển đổi hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.spanner.grpc-port

Cổng TCP mà trình mô phỏng cần được liên kết.

Loại: Số nguyên 16 bit chưa ký; từ 0 đến 65535 (bao gồm cả hai giá trị này)

Mặc định: 9010

dịch vụ.spanner.rest-port

Cổng phân phát các yêu cầu REST

Loại: Số nguyên 16 bit chưa ký; từ 0 đến 65535 (bao gồm cả hai giá trị này)

Mặc định: 9020