Personalizza la tua area di lavoro IDX

L'obiettivo del progetto IDX è essere il più utile possibile per gli sviluppatori. Uno dei modi in cui IDX riesce a raggiungere questo obiettivo è offrire agli sviluppatori la libertà e la flessibilità di installare gli strumenti giusti per qualsiasi progetto nelle loro aree di lavoro e personalizzare le impostazioni in modo che le loro aree di lavoro si adattino alle loro esigenze.

Nix + IDX

IDX utilizza Nix per definire la configurazione dell'ambiente per ogni area di lavoro. Nix è un gestore di pacchetti puramente funzionale e assegna identificatori univoci a ciascuna dipendenza, il che significa che il tuo ambiente può contenere più versioni della stessa dipendenza senza problemi. È riproducibile e dichiarativa. Nel contesto di IDX, questo significa che puoi condividere il file di configurazione Nix tra le aree di lavoro per caricare la stessa configurazione dell'ambiente.

IDX definisce le configurazioni dell'ambiente di anteprima e dei pacchetti dell'area di lavoro direttamente dal repository del codice con il file .idx/dev.nix. Gli attributi e le librerie di pacchetti che puoi definire in questo file seguono la sintassi del set di attributi Nix.

L'esempio seguente mostra una configurazione di base dell'ambiente che consente le anteprime:

{ 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";
      };
    };
  };
}

Attributi e librerie di pacchetti di Nix

pacchi

Pacchetti da installare nell'ambiente.

Puoi utilizzare l'argomento pkgs per selezionare i pacchetti da installare, ad esempio pkgs.python3. Tieni presente che i contenuti di pkgs dipendono dall'opzione del canale channel selezionata.

Esempio:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

Puoi cercare i pacchetti disponibili qui: stable-23.11 o unstable.

Tipo: elenco del pacchetto

Predefinita: [ ]

canale

nixpkgs.

Questo canale definisce i contenuti dell'argomento pkgs.

Tipo: uno dei seguenti: "stable-23.05", "stable-23.11", "unstable"

Predefinita: "stable-23.11"

env

Variabili di ambiente impostate all'interno dell'ambiente di sviluppo.

Questi vengono propagati a tutte le shell e al server di anteprima. Le variabili di ambiente possono essere particolarmente utili se l'applicazione richiede un set specifico di variabili.

Esempio:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Tipo: l'insieme di attributi qualsiasi cosa

Predefinita: { }

idx.extensions

Estensioni di codice che vuoi installare nella tua area di lavoro IDX.

Questo è un elenco di ID estensioni completi, ad esempio ${publisherId}.${extensionId}.

Puoi trovare un elenco delle estensioni disponibili in Apri VSX Registry e inserirle nel tuo file dev.nix entro il giorno ${publisherId}.${extensionId}.

Tipo: elenco di (stringa o percorso non vuoti)

Predefinita: [ ]

idx.previews.enable

Impostalo su true per attivare le anteprime IDX.

Questa funzionalità offre un modo per eseguire e ricaricare le app automaticamente durante la loro sviluppo.

Tipo: booleano

Predefinita: true

Esempio: true

idx.previews.previews

Configura l'anteprima.

Definisci i comandi che IDX esegue nel tuo ambiente di sviluppo.

Esempio:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

Tipo: insieme di attributi di (sottomodulo)

Predefinita: { }

idx.previews.previews.<name>.command

Comando da eseguire

Tipo: elenco di stringhe

Predefinita: [ ]

idx.previews.previews.<name>.cwd

Directory di lavoro

Tipo: stringa

Predefinita: ""

idx.previews.previews.<name>.env

Variabili di ambiente da impostare.

Tipo: insieme di attributi di stringa.

Predefinita: { }

idx.previews.previews.<name>.manager

Gestore

Tipo: uno tra "web", "flutter"

idx.workspace.onCreate

Comandi da eseguire quando l'area di lavoro viene creata e aperta per la prima volta.

Questo può essere utile per configurare l'ambiente di sviluppo. Ad esempio, qui specifichiamo npm install per l'esecuzione:

{pkgs, ...}: {
  idx.workspace.
    npm-install = "npm install";
  };
}

Tipo: insieme di attributi di (percorso o stringa)

Predefinita: { }

idx.workspace.onStart

Comandi da eseguire all'apertura dell'area di lavoro.

Può essere utile per iniziare a creare spettatori. Ad esempio, qui specifichiamo 2 comandi da eseguire:

{pkgs, ...}: {
  idx.workspace.
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Tipo: insieme di attributi di (percorso o stringa)

Predefinita: { }

services.docker.enable

Se attivare docker Rootless.

Tipo: booleano

Predefinita: false

Esempio: true

services.mysql.enable

Se abilitare il server MySQL.

Il server viene inizializzato con un root utente senza password. Quindi, per creare utenti aggiuntivi e creare database, utilizza mysql -u root. .

Tipo: booleano

Predefinita: false

Esempio: true

services.mysql.package

pacchetto MySQL da utilizzare.

Tipo: pacchetto

Predefinita: pkgs.mysql

Esempio: pkgs.mysql80

services.postgres.enable

Se abilitare il server PostgreSQL.

Tipo: booleano

Predefinita: false

Esempio: true

services.postgres.package

per PostgreSQL da utilizzare.

Tipo: pacchetto

Predefinita: pkgs.postgresql

Esempio: pkgs.postgresql_15

services.postgres.extensions

Installare le estensioni Postgres.

grep1

Predefinita: [ ]

Esempio: [ "pgvector" "postgis" ];

services.pubsub.enable

Indica se abilitare l'emulatore Google Pub/Sub.

Ulteriore documentazione sull'utilizzo dell'emulatore è disponibile qui: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Tipo: booleano

Predefinita: false

Esempio: true

services.pubsub.port

Configura la porta su cui Pub/Sub è in ascolto.

Tipo: numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinita: 8085

services.pubsub.ID progetto

ID progetto da utilizzare per eseguire l'emulatore Pub/Sub. Questo progetto è solo a scopo di test, non deve esistere e viene usato solo localmente.

Tipo: stringa corrispondente al pattern [a-z][a-z0-9-]{5,29}

Predefinita: "idx-pubsub-emulator"

services.redis.enable

Se abilitare il server Redis.

Tipo: booleano

Predefinita: false

Esempio: true

services.redis.port

Configura la porta su cui Redis è in ascolto.

Per impostazione predefinita, tcp è disattivato e Redis rimane in ascolto solo su /tmp/redis/redis.sock.

Tipo: numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinita: 0

services.spanner.enable

Se abilitare l'emulatore di Google Cloud Spanner.

Tipo: booleano

Predefinita: false

Esempio: true

services.spanner.fault-injection

Se abilitare l'inserimento di errori casuali nelle transazioni.

Tipo: booleano

Predefinita: false

Esempio: true

services.spanner.grpc-port

La porta TCP a cui deve essere associato l'emulatore.

Tipo: numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinita: 9010

services.spanner.rest-port

La porta su cui vengono gestite le richieste REST

Tipo: numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinita: 9020