Projekt IDX ma być jak najbardziej użyteczny dla programistów. Jednym ze sposobów realizacji tego zadania przez IDX jest zapewnienie im swobody i elastyczności w zakresie instalowania w obszarach roboczych odpowiednich narzędzi do poszczególnych projektów oraz dostosowywania ustawień do własnych potrzeb.
Nix + IDX
IDX używa Nix do definiowania konfiguracji środowiska dla każdego obszaru roboczego. Nix to w pełni funkcjonalny menedżer pakietów, który przypisuje unikalne identyfikatory do każdej zależności. Dzięki temu Twoje środowisko może bezproblemowo zawierać wiele wersji tej samej zależności. Są też powtarzalne i deklaratywne. W kontekście IDX oznacza to, że możesz udostępnić plik konfiguracji Nix innym obszarom roboczym, aby wczytać tę samą konfigurację środowiska.
IDX definiuje konfigurację środowiska podglądu i pakietów Workspace bezpośrednio z repozytorium kodu za pomocą pliku .idx/dev.nix
.
Atrybuty i biblioteki pakietów, które możesz zdefiniować w tym pliku, są zgodne ze składnią zestawu atrybutów Nix.
Ten przykład przedstawia podstawową konfigurację środowiska umożliwiającą włączenie podglądu:
{ 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";
};
};
};
}
Atrybuty Nix i biblioteki pakietów
przesyłki
Pakiety do zainstalowania w środowisku.
Aby wybrać pakiety do zainstalowania, możesz użyć argumentu pkgs
, np. pkgs.python3
. Pamiętaj, że zawartość elementu pkgs
zależy od wybranej opcji kanału channel
.
Przykład:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Dostępne pakiety możesz wyszukać tutaj: stable-23.11 lub unstable.
Typ: lista pakietu
Wartość domyślna: [ ]
kanał
kanału nixpkgs.
Ten kanał definiuje zawartość argumentu pkgs
.
Typ: jedna z wartości „stable-23.05”, „stable-23.11”, „unstable”.
Wartość domyślna: "stable-23.11"
env
Zmienne środowiskowe ustawiane w środowisku programistycznym.
Są one przekazywane do wszystkich powłok i na serwerze podglądu. Zmienne środowiskowe mogą być szczególnie przydatne, gdy aplikacja wymaga określonego zestawu zmiennych.
Przykład:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Typ:dowolny zestaw atrybutów
Wartość domyślna: { }
idx.extensions
Rozszerzenia kodu, które chcesz zainstalować w obszarze roboczym IDX.
To lista pełnych i jednoznacznych identyfikatorów rozszerzeń, np. ${publisherId}.${extensionId}
.
Listę dostępnych rozszerzeń znajdziesz w Open VSX Registry. Wpisz je w pliku dev.nix
do ${publisherId}.${extensionId}
.
Typ: lista (niepusty ciąg znaków lub ścieżka)
Wartość domyślna: [ ]
idx.previews.enable
Aby włączyć podgląd IDX, ustaw wartość true
.
Ta funkcja umożliwia automatyczne uruchamianie i ponowne uruchamianie aplikacji w trakcie ich tworzenia.
Typ: wartość logiczna
Wartość domyślna: true
Przykład: true
idx.previews.previews
Wyświetl podgląd konfiguracji.
Zdefiniuj polecenia wykonywane przez IDX w środowisku programistycznym.
Przykład:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Typ: zestaw atrybutów (moduł podrzędny)
Wartość domyślna: { }
idx.previews.previews.<name>.command
Polecenie do wykonania
Typ: lista ciągów tekstowych.
Wartość domyślna: [ ]
idx.previews.previews.<name>.cwd
Katalog roboczy
Typ: ciąg znaków
Wartość domyślna: ""
idx.previews.previews.<name>.env
Zmienne środowiskowe do ustawienia.
Typ:zestaw atrybutów w ciągu znaków
Wartość domyślna: { }
idx.previews.previews.<name>.manager
Menedżer
Typ: jeden z „internet”, „flutter”
idx.workspace.onCreate
Polecenia do wykonania przy tworzeniu i otwarciu obszaru roboczego po raz pierwszy.
Może się to przydać do skonfigurowania środowiska programistycznego. Na przykład tutaj określamy, który element npm install
ma być uruchamiany:
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
Typ: zestaw atrybutów (ścieżka lub ciąg znaków).
Wartość domyślna: { }
idx.workspace.onStart
Polecenia do wykonywania po każdym otwarciu obszaru roboczego.
Może to być przydatne, aby rozpocząć zwiększanie liczby obserwujących. Na przykład określamy 2 polecenia do uruchomienia:
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Typ: zestaw atrybutów (ścieżka lub ciąg znaków).
Wartość domyślna: { }
services.docker.enable
Określa, czy włączyć dockera bez roota.
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.mysql.enable
Określa, czy włączyć serwer MySQL.
Serwer jest inicjowany od poziomu głównego użytkownika bez hasła. Aby więc utworzyć dodatkowych użytkowników i bazy danych, użyj mysql -u root
. .
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.mysql.package
Pakiet MySQL, którego chcesz użyć.
Typ: pakiet
Wartość domyślna: pkgs.mysql
Przykład: pkgs.mysql80
services.postgres.enable
Określa, czy włączyć serwer PostgreSQL.
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.postgres.package
Pakiet PostgreSQL do użycia.
Typ: pakiet
Wartość domyślna: pkgs.postgresql
Przykład: pkgs.postgresql_15
services.postgres.extensions
Rozszerzenia Postgres do zainstalowania.
,"gphes,"list of","gpheglips","gphet pl","góry_pl&","góry3","góry_pl","góry37m", "apache_datasketches", "cstore_fdw", "hypopg", "periods_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pgtd_scale25519"
Wartość domyślna: [ ]
Przykład: [ "pgvector" "postgis" ];
services.pubsub.enable
Określa, czy włączyć emulator Google Pub/Sub.
Więcej dokumentacji na temat używania emulatora znajdziesz tutaj: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.pubsub.port
Konfiguruje port, na którym będzie nasłuchiwać Pub/Sub.
Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)
Wartość domyślna: 8085
usługi.pubsub.identyfikator-projektu
Identyfikator projektu, którego chcesz używać do uruchamiania emulatora Pub/Sub. Ten projekt służy wyłącznie do testowania, nie musi istnieć i jest używany tylko lokalnie.
Typ: ciąg znaków pasujący do wzorca [a-z][a-z0-9-]{5,29}
Wartość domyślna: "idx-pubsub-emulator"
services.redis.enable
Określa, czy włączyć serwer Redis.
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.redis.port
Konfiguruje port, na którym będzie nasłuchiwać Redis.
Domyślnie tcp jest wyłączony, a Redis nasłuchuje tylko w /tmp/redis/redis.sock.
Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)
Wartość domyślna: 0
services.spanner.enable
Określa, czy włączyć emulator Google Cloud Spanner.
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.spanner.fault-injection
Określa, czy włączyć losowe wstrzykiwanie błędów do transakcji.
Typ: wartość logiczna
Wartość domyślna: false
Przykład: true
services.spanner.grpc-port
Port TCP, z którym powinien być powiązany emulator.
Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)
Wartość domyślna: 9010
services.spanner.rest-port
Port, w którym są obsługiwane żądania REST
Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)
Wartość domyślna: 9020