Project IDX ti consente di personalizzare l'area di lavoro in base alle esigenze specifiche del tuo progetto definendo un singolo file di configurazione .idx/dev.nix
che descrive:
- Gli strumenti di sistema che devono essere in grado di eseguire (ad esempio dal terminale), come i compilatori o altri programmi binari.
- Le estensioni IDE che devi installare (ad esempio, il supporto dei linguaggi di programmazione).
- Come dovrebbero essere visualizzate le anteprime dell'app (ad esempio, i comandi per eseguire il server web).
- Variabili di ambiente globali disponibili per i server locali in esecuzione nella tua area di lavoro.
Consulta il riferimento dev.nix
per una
descrizione completa delle funzionalità disponibili.
Nix e IDX
IDX utilizza Nix per definire la configurazione dell'ambiente per ogni area di lavoro. Nello specifico, IDX utilizza:
Il linguaggio di programmazione Nix per descrivere gli ambienti dell'area di lavoro. Nix è un linguaggio di programmazione funzionale. Gli attributi e le librerie di pacchetti che puoi definire nel file
dev.nix
seguono la sintassi del set di attributi Nix.Il gestore di pacchetti Nix per gestire gli strumenti di sistema disponibili per la tua area di lavoro. Questa soluzione è simile a quella per i gestori di pacchetti specifici del sistema operativo come APT (
apt
eapt-get
), Homebrew (brew
) edpkg
.
Poiché gli ambienti Nix sono riproducibili e dichiarativi, nel contesto di IDX, puoi condividere il tuo file di configurazione Nix come parte del tuo repository Git per assicurarti che tutti gli utenti che lavorano al tuo progetto abbiano la stessa configurazione dell'ambiente.
Esempio di base
L'esempio seguente mostra una configurazione di base dell'ambiente che abilita 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";
};
};
};
}
Aggiungi strumenti di sistema
Per aggiungere strumenti di sistema all'area di lavoro, ad esempio compilatori o programmi di interfaccia a riga di comando per i servizi cloud, trova l'ID pacchetto univoco nel registro dei pacchetti Nix e aggiungilo all'oggetto packages
del file dev.nix
, preceduto dal prefisso "pkgs.:
{ 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
];
...
}
Questo è diverso dalla modalità con cui potresti installare pacchetti di sistema
utilizzando gestori di pacchetti specifici del sistema operativo, ad esempio APT (apt
e apt-get
), Homebrew
(brew
) e dpkg
. Descrivere dichiarativamente esattamente quali pacchetti di sistema sono necessari fa sì che le aree di lavoro IDX siano più facili da condividere e riprodurre.
Usa binari dei nodi locali
Proprio come sulla tua macchina locale, i programmi binari relativi ai pacchetti di nodi installati localmente (ovvero i pacchetti definiti nel tuo package.json
) possono essere eseguiti in un riquadro del Terminale richiamandoli con il comando npx
.
Per maggiore praticità, se ti trovi in una directory con una cartella node_modules
(ad esempio la directory radice di un progetto web), i programmi binari installati in locale possono essere richiamati direttamente, senza il prefisso npx
.
Aggiungi gcloud
componenti
Una configurazione predefinita dell'interfaccia a riga di comando gcloud
per Google
Cloud è disponibile per tutte le aree di lavoro
IDX.
Se hai bisogno di componenti aggiuntivi, puoi aggiungerli al file dev.nix
in questo modo:
{ pkgs }: {
packages = [
...
(pkgs.google-cloud-sdk.withExtraComponents [
pkgs.google-cloud-sdk.components.cloud-datastore-emulator
])
...
];
}
Aggiungi estensioni IDE
Puoi installare le estensioni in IDX utilizzando il registro delle estensioni OpenVSX in due modi:
Tramite il riquadro Estensioni in IDX per scoprire e installare le estensioni. Questo approccio è ideale per le estensioni specifiche per utente, ad esempio:
- Temi cromatici personalizzati
Aggiungendo estensioni al tuo file
dev.nix
. Queste estensioni verranno installate automaticamente quando condividi la configurazione dell'area di lavoro. Questo approccio è migliore per le estensioni specifiche del progetto, ad esempio:- Estensioni dei linguaggi di programmazione, inclusi i debugger specifici dei linguaggi
- Estensioni ufficiali per i servizi cloud utilizzati nel progetto
- Formattatori di codice
Per quest'ultimo approccio, puoi includere estensioni IDE nel file dev.nix
cercando l'ID estensione completo (nel formato <publisher>.<id>
) e aggiungendolo all'oggetto idx.extensions
in questo modo:
{ pkgs, ... }: {
...
# Search for the extensions you want on https://open-vsx.org/ and use the format
# "<publisher>.<id>"
idx.extensions = [
"angular.ng-template"
];
...
}
Aggiungi servizi comuni
IDX offre inoltre impostazioni e configurazione semplificate per i servizi più comuni di cui potresti aver bisogno durante lo sviluppo, tra cui:
- Container
- Docker (
services.docker.*
)
- Docker (
- Messaggistica
- Emulatore Pub/Sub (
services.pubsub.*
)
- Emulatore Pub/Sub (
- Database
- MySQL (
services.mysql.*
) - Postgres (
services.postgres.*
) - Redis (
services.redis.*
) - Spanner (
services.spanner.*
)
- MySQL (
Per maggiori dettagli sull'abilitazione di questi servizi nell'area di lavoro, consulta le parti services.*
del riferimento dev.nix
.
Personalizza le anteprime
Per maggiori dettagli su come personalizzare le anteprime delle tue app, consulta la documentazione sulle anteprime.
Vedi tutte le opzioni di personalizzazione
Consulta la documentazione di riferimento di dev.nix
per una descrizione dettagliata dello schema di configurazione dell'ambiente.