Das Ziel von Project IDX ist es, für Entwickler so nützlich wie möglich zu sein. IDX kann dies erreichen, indem es Entwicklern die Freiheit und Flexibilität gibt, die richtigen Tools für ein bestimmtes Projekt in ihrem Arbeitsbereich zu installieren und die Einstellungen so anzupassen, dass die Arbeitsbereiche für sie funktionieren.
Nix + IDX
IDX verwendet Nix, um die Umgebungskonfiguration für jeden Arbeitsbereich zu definieren. Nix ist ein rein funktionierender Paketmanager und weist jeder Abhängigkeit eindeutige Kennzeichnungen zu. Dies bedeutet letztendlich, dass Ihre Umgebung nahtlos mehrere Versionen derselben Abhängigkeit enthalten kann. Sie ist außerdem reproduzierbar und deklarativ. Im Kontext von IDX bedeutet dies, dass Sie Ihre Nix-Konfigurationsdatei über Arbeitsbereiche hinweg freigeben können, um dieselbe Umgebungskonfiguration zu laden.
IDX definiert die Konfiguration der Vorschauumgebung und des Arbeitsbereichspakets direkt aus dem Code-Repository mit der Datei .idx/dev.nix
.
Die Attribute und Paketbibliotheken, die Sie in dieser Datei definieren können, folgen der Syntax von Nix-Attributsätzen.
Das folgende Beispiel zeigt eine grundlegende Umgebungskonfiguration zum Aktivieren der Vorschau:
{ 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-Attribute und Paketbibliotheken
Pakete
Pakete, die in der Umgebung installiert werden sollen.
Mit dem Argument pkgs
können Sie Pakete auswählen, die installiert werden sollen, z. B. pkgs.python3
. Der Inhalt von pkgs
hängt von der ausgewählten Kanaloption channel
ab.
Beispiel:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Sie können hier nach verfügbaren Paketen suchen: stable-23.11 oder unstable.
Typ:Liste des Pakets
Standardwert: [ ]
Kanal
zu verwenden.
Dieser Kanal definiert den Inhalt des Arguments pkgs
.
Typ:entweder „stable-23.05“, „stable-23.11“ oder „unstable“
Standardwert: "stable-23.11"
env
Umgebungsvariablen, die in der Entwicklungsumgebung festgelegt werden.
Diese werden an alle Shells und den Vorschauserver weitergegeben. Umgebungsvariablen können besonders nützlich sein, wenn Ihre Anwendung einen bestimmten Satz von Variablen erfordert.
Beispiel:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Typ:beliebiger Attributsatz
Standardwert: { }
idx.extensions
Codeerweiterungen, die Sie in Ihrem IDX-Arbeitsbereich installieren möchten.
Dies ist eine Liste voll qualifizierter Erweiterungs-IDs, z. B. ${publisherId}.${extensionId}
.
Eine Liste der verfügbaren Erweiterungen finden Sie in VSX Registry öffnen. Geben Sie sie bis zum ${publisherId}.${extensionId}
in die Datei dev.nix
ein.
Typ:Liste von (nicht leerer String oder Pfad)
Standardwert: [ ]
idx.previews.enable
Legen Sie dafür true
fest, um die IDX-Vorschau zu aktivieren.
Mit diesem Feature können Sie Ihre Anwendungen während der Entwicklung automatisch ausführen und neu laden.
Typ: Boolesch
Standardwert: true
Beispiel: true
idx.previews.previews
Vorschau der Konfigurationen ansehen.
Definieren Sie die Befehle, die IDX in Ihrer Entwicklungsumgebung ausführt.
Beispiel:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Type:Attributsatz von (untergeordnetes Modul)
Standardwert: { }
idx.previews.previews.<name>.command
Auszuführender Befehl
Typ:Stringliste
Standardwert: [ ]
idx.previews.previews.<name>.cwd
Arbeitsverzeichnis
Typ: String
Standardwert: ""
idx.previews.previews.<name>.env
Umgebungsvariablen festzulegen.
Typ:Attributsatz mit String
Standardwert: { }
idx.previews.previews.<name>.manager
Abteilungsleitung
Typ:entweder „Web“ oder „Flutter“
idx.workspace.onCreate
Befehle, die beim Erstellen und ersten Öffnen des Arbeitsbereichs ausgeführt werden sollen.
Dies kann beim Einrichten der Entwicklungsumgebung hilfreich sein. Hier geben wir beispielsweise npm install
zur Ausführung an:
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
Typ:Attributsatz von (Pfad oder String)
Standardwert: { }
idx.workspace.onStart
Befehle, die immer dann ausgeführt werden, wenn der Arbeitsbereich geöffnet wird.
Dies kann nützlich sein, um Build Watchers zu starten. Hier geben wir zum Beispiel zwei auszuführende Befehle an:
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Typ:Attributsatz von (Pfad oder String)
Standardwert: { }
services.docker.enable
Gibt an, ob Rootless Docker aktiviert wird.
Typ: Boolesch
Standardwert: false
Beispiel: true
services.mysql.enable
Gibt an, ob der MySQL-Server aktiviert werden soll.
Der Server wird mit einem passwortlosen Nutzerstamm initialisiert. Verwenden Sie also mysql -u root
, um zusätzliche Nutzer und Datenbanken zu erstellen. .
Typ: Boolesch
Standardwert: false
Beispiel: true
services.mysql.package
Zu verwendendes MySQL-Paket.
Typ:Paket
Standardwert: pkgs.mysql
Beispiel: pkgs.mysql80
services.postgres.enable
Gibt an, ob der PostgreSQL-Server aktiviert werden soll.
Typ: Boolesch
Standardwert: false
Beispiel: true
services.postgres.package
Zu verwendendes PostgreSQL-Paket.
Typ:Paket
Standardwert: pkgs.postgresql
Beispiel: pkgs.postgresql_15
services.postgres.extensions
Zu installierende Postgres-Erweiterungen.
g
Standardwert: [ ]
Beispiel: [ "pgvector" "postgis" ];
services.pubsub.enable
Gibt an, ob der Google Pub/Sub-Emulator aktiviert wird.
Weitere Informationen zur Verwendung des Emulators finden Sie hier: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .
Typ: Boolesch
Standardwert: false
Beispiel: true
services.pubsub.port
Konfiguriert den Port, den Pub/Sub überwacht.
Typ:16-Bit-Ganzzahl ohne Vorzeichen; zwischen 0 und 65.535 (beide einschließlich)
Standardwert: 8085
services.pubsub.project-id
Projekt-ID zum Ausführen des Pub/Sub-Emulators. Dieses Projekt dient nur zu Testzwecken. Es muss nicht vorhanden sein und wird nur lokal verwendet.
Typ:String, der dem Muster [a-z][a-z0-9-] entspricht{5,29}
Standardwert: "idx-pubsub-emulator"
services.redis.enable
Gibt an, ob der Redis-Server aktiviert werden soll.
Typ: Boolesch
Standardwert: false
Beispiel: true
services.redis.port
Konfiguriert den Port, den Redis überwacht.
Standardmäßig ist „tcp“ deaktiviert und „redis“ hört nur „/tmp/redis/redis.sock“ zu.
Typ:16-Bit-Ganzzahl ohne Vorzeichen; zwischen 0 und 65.535 (beide einschließlich)
Standardwert: 0
services.spanner.enable
Gibt an, ob der Google Cloud Spanner-Emulator aktiviert wird.
Typ: Boolesch
Standardwert: false
Beispiel: true
services.spanner.fault-injection
Gibt an, ob die zufällige Fehlerinjektion in Transaktionen aktiviert werden soll.
Typ: Boolesch
Standardwert: false
Beispiel: true
services.spanner.grpc-port
Der TCP-Port, an den der Emulator gebunden werden soll.
Typ:16-Bit-Ganzzahl ohne Vorzeichen; zwischen 0 und 65.535 (beide einschließlich)
Standardwert: 9010
services.spanner.rest-port
Der Port, an dem REST-Anfragen verarbeitet werden
Typ:16-Bit-Ganzzahl ohne Vorzeichen; zwischen 0 und 65.535 (beide einschließlich)
Standardwert: 9020