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