自訂 IDX 工作區

專案 IDX 的目標是盡可能為開發人員提供實用服務。IDX 達成此目的的方法之一,是讓開發人員能夠自由且靈活地在工作區中為任何專案安裝合適的工具,並自訂各項設定,以便讓其工作區用於處理用途。

Nix + IDX

IDX 使用 Nix 定義每個工作區的環境設定。Nix 是純粹的套件管理工具,並會為每個依附元件指派專屬 ID,最終意味您的環境可以順暢包含相同依附元件的多個版本。這個 API 也可以重現且宣告式。在 IDX 中,這表示您可以在不同工作區之間共用 Nix 設定檔,載入相同的環境設定。

IDX 會利用 .idx/dev.nix 檔案,直接從程式碼存放區定義預覽環境和工作區套件設定。此檔案中定義的屬性和套件程式庫,會遵循 Nix 屬性集語法

以下是啟用預覽功能的基本環境設定範例:

{ 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";
      };
    };
  };
}

Nix 屬性和套件程式庫

包裹

要在環境中安裝的套件。

您可以使用 pkgs 引數選取要安裝的套件,例如 pkgs.python3。請注意,pkgs 的內容取決於所選的 channel 頻道選項。

示例:

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

您可以在這裡搜尋可用的套件:stable-23.11unstable

類型:套件清單

預設: [ ]

頻道

要使用的 nixpkgs 通道。

此管道定義 pkgs 引數的內容。

類型:其中一種為「stable-23.05」、「stable-23.11」、「不穩定」

預設: "stable-23.11"

env

在開發人員環境中設定的環境變數。

這些變更會套用至所有殼層和預覽伺服器。 如果應用程式需要一組特定的變數,環境變數會特別實用。

示例:

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

類型:任一屬性集

預設: { }

idx.extensions

您要在 IDX 工作區中安裝的程式碼擴充功能。

這是完整的擴充內容 ID (例如 ${publisherId}.${extensionId})。

您可以在開啟 VSX Registry 中找到可用的擴充功能清單,並於 ${publisherId}.${extensionId} 前在 dev.nix 檔案中輸入擴充功能。

類型:包含 (非空白字串或路徑) 的清單

預設: [ ]

idx.previews.enable

將其設為 true 即可啟用 IDX 預覽。

這項功能可讓您在開發應用程式時自動執行及重新載入應用程式。

類型:布林值

預設: true

範例: true

idx.previews.previews

預覽設定。

定義 IDX 在開發人員環境中執行的指令。

示例:

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

類型:一組 (子模組) 屬性

預設: { }

idx.previews.previews.*.command

要執行的指令

類型:字串清單

預設: [ ]

idx.previews.previews.*.cwd

工作目錄

類型:字串

預設: ""

idx.previews.previews.*.env

要設定的環境變數。

類型:字串屬性

預設: { }

idx.previews.previews.*.manager

經理

類型:web 之一或 flutter

idx.workspace.onCreate

建立工作區並首次開啟時要執行的指令。

這有助於設定開發環境。例如,我們要指定執行 npm install

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

類型:一組 (路徑或字串) 屬性

預設: { }

idx.workspace.onStart

每當工作區開啟時要執行的指令,

這有助於啟動看守工具。例如,我們要指定 2 個要執行的指令:

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

類型:一組 (路徑或字串) 屬性

預設: { }

services.docker.enable

是否要啟用無根 Docker。

類型:布林值

預設: false

範例: true