IDX-Arbeitsbereich anpassen

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