專案 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.11 或 unstable。
類型:套件清單
預設: [ ]
頻道
要使用的 nixpkgs 通道。
此管道定義 pkgs
引數的內容。
類型:可以是「stable-23.05」、「stable-23.11」或「unstable」
預設: "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.<name>.command
要執行的指令
類型:字串清單
預設: [ ]
idx.previews.previews.<name>.cwd
工作目錄
類型:字串
預設: ""
idx.previews.previews.<name>.env
要設定的環境變數。
類型:字串屬性組合
預設: { }
idx.previews.previews.<name>.manager
經理
類型:可以是「web」或「flutter」
idx.workspace.onCreate
建立工作區並首次開啟時要執行的指令。
這有助於設定開發環境。例如,我們要指定執行 npm install
:
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
類型:一組 (路徑或字串) 屬性
預設: { }
idx.workspace.onStart
每當工作區開啟時要執行的指令,
這有助於啟動看守工具。例如,我們要指定 2 個要執行的指令:
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
類型:一組 (路徑或字串) 屬性
預設: { }
services.docker.enable
是否要啟用無根 Docker。
類型:布林值
預設: false
範例:true
services.mysql.enable
是否要啟用 MySQL 伺服器。
系統會使用無密碼使用者的根層級初始化伺服器。因此,如要建立其他使用者並建立資料庫,請使用 mysql -u root
。
類型:布林值
預設: false
範例:true
services.mysql.package
要使用的 MySQL 套件。
類型:套件
預設: pkgs.mysql
範例:pkgs.mysql80
services.postgres.enable
是否要啟用 PostgreSQL 伺服器。
類型:布林值
預設: false
範例:true
services.postgres.package
要使用的 PostgreSQL 套件。
類型:套件
預設: pkgs.postgresql
範例:pkgs.postgresql_15
services.postgres.extensions
要安裝的 Postgres 擴充功能。
Type: "age", "apache_datasketches",
預設: [ ]
範例:[ "pgvector" "postgis" ];
services.pubsub.enable
是否要啟用 Google Pub/Sub 模擬器。
如要進一步瞭解如何使用模擬器,請前往: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator。
類型:布林值
預設: false
範例:true
services.pubsub.port
設定 Pub/Sub 要監聽的通訊埠。
類型:16 位元無正負號整數,介於 0 到 65535 之間 (含首尾)
預設: 8085
services.pubsub.project-id
用來執行 Pub/Sub 模擬器的專案 ID。此專案僅供測試,不需要存在,且僅在本機使用。
類型:符合模式 [a-z][a-z0-9-]{5,29} 的字串
預設: "idx-pubsub-emulator"
services.redis.enable
是否要啟用 Redis 伺服器。
類型:布林值
預設: false
範例:true
services.redis.port
設定 Redis 會監聽的通訊埠。
預設 TCP 功能為停用狀態,redis 僅監聽 /tmp/redis/redis.sock。
類型:16 位元無正負號整數,介於 0 到 65535 之間 (含首尾)
預設: 0
services.spanner.enable
是否要啟用 Google Cloud Spanner Emulator。
類型:布林值
預設: false
範例:true
services.spanner.fault-injection
是否啟用轉碼中的隨機錯誤植入功能。
類型:布林值
預設: false
範例:true
services.spanner.grpc-port
應與模擬器繫結的 TCP 通訊埠。
類型:16 位元無正負號整數,介於 0 到 65535 之間 (含首尾)
預設: 9010
Services.spanner.rest-port
處理 REST 要求的通訊埠
類型:16 位元無正負號整數,介於 0 到 65535 之間 (含首尾)
預設: 9020