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.
Sie können das Argument pkgs
verwenden, um zu installierende Pakete auszuwählen, z.B. pkgs.python3
.
Beachte, dass der Inhalt von pkgs
von der ausgewählten Kanaloption channel
abhängt.
Beispiel:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Hier können Sie nach verfügbaren Paketen suchen: stable-23.11 oder unstable.
Typ: Liste des Pakets
Standard:
[ ]
Kanal
zu verwenden.
Dieser Kanal definiert den Inhalt des Arguments pkgs
.
Typ:entweder „stable-23.05“, „stable-23.11“ oder „unstable“
Standard:
"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";
};
}
Type:beliebiger Attributsatz
Standard:
{ }
idx.extensions
Codeerweiterungen, die Sie in Ihrem IDX-Arbeitsbereich installieren möchten.
Dies ist eine Liste voll qualifizierter Erweiterungs-IDs wie ${publisherId}.${extensionId}
.
Eine Liste der verfügbaren Erweiterungen finden Sie in VSX Registry öffnen. Geben Sie sie bis zum ${publisherId}.${extensionId}
in Ihre dev.nix
-Datei ein.
Typ: Liste von (nicht leerer String oder Pfad)
Standard:
[ ]
idx.previews.enable
Legen Sie dafür true
fest, um die IDX-Vorschau zu aktivieren.
Mit dieser Funktion können Sie Ihre Apps während der Entwicklung automatisch ausführen und neu laden.
Typ:boolesch
Standard:
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)
Standard:
{ }
idx.previews.previews.*.command
Auszuführender Befehl
Typ: Liste des Strings
Standard:
[ ]
idx.previews.previews.*.cwd
Arbeitsverzeichnis
Typ:string
Standard:
""
idx.previews.previews.*.env
Umgebungsvariablen festzulegen.
Typ:Attributsatz von String
Standard:
{ }
idx.previews.previews.*.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.onCreate = {
npm-install = "npm install";
};
}
Typ:Attributsatz von (Pfad oder String)
Standard:
{ }
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 beispielsweise zwei auszuführende Befehle an:
{pkgs, ...}: {
idx.workspace.onStart = {
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Typ:Attributsatz von (Pfad oder String)
Standard:
{ }
services.docker.enable
Gibt an, ob Rootless Docker aktiviert wird.
Typ:boolesch
Standard:
false
Beispiel:
true