O objetivo do Project IDX é ser o mais útil possível para os desenvolvedores. A IDX faz isso oferecendo aos desenvolvedores a liberdade e a flexibilidade de instalar as ferramentas certas para qualquer projeto no espaço de trabalho e personalizar configurações para que os espaços de trabalho funcionem para eles.
Nix + IDX
O IDX usa o Nix para definir a configuração do ambiente para cada espaço de trabalho. O Nix é um gerenciador de pacotes puramente funcional e atribui identificadores exclusivos a cada dependência, o que significa que seu ambiente pode conter várias versões da mesma dependência perfeitamente. Ele também é reproduzível e declarativo. No contexto do IDX, isso significa que é possível compartilhar seu arquivo de configuração Nix em vários espaços de trabalho para carregar a mesma configuração de ambiente.
O IDX define o ambiente de visualização e as configurações do pacote do espaço de trabalho
diretamente do repositório do código com o arquivo .idx/dev.nix
.
Os atributos e as bibliotecas de pacotes que podem ser definidos nesse arquivo seguem a
sintaxe do conjunto de atributos do Nix (link em inglês).
O exemplo a seguir mostra uma configuração básica de ambiente que permite visualizações:
{ 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";
};
};
};
}
Atributos Nix e bibliotecas de pacotes
pacotes
Pacotes a serem instalados no ambiente.
Você pode usar o argumento pkgs
para selecionar pacotes a serem instalados, por exemplo,
pkgs.python3
. Observe que o conteúdo de pkgs
depende da opção de canal
channel
selecionada.
Exemplo:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Você pode pesquisar os pacotes disponíveis aqui: stable-23.11 ou instable.
Tipo:lista de pacotes
Padrão:[ ]
canal
o canal nixpkgs será usado.
Esse canal define o conteúdo do argumento pkgs
.
Tipo:um entre "stable-23.05", "stable-23.11", "unstable"
Padrão:"stable-23.11"
env
Variáveis de ambiente definidas no ambiente do desenvolvedor.
Eles são propagados para todos os shells e para o servidor de visualização. As variáveis de ambiente podem ser especialmente úteis se o aplicativo exigir um conjunto específico de variáveis.
Exemplo:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Tipo:conjunto de atributos de qualquer coisa
Padrão:{ }
idx.extensions
Extensões de código que você quer instalar no espaço de trabalho do IDX.
Esta é uma lista de IDs de extensão totalmente qualificados, por exemplo, ${publisherId}.${extensionId}
.
É possível encontrar uma lista de extensões disponíveis no
Open VSX Registry e inseri-las no arquivo dev.nix
até ${publisherId}.${extensionId}
.
Tipo:lista de (string ou caminho não vazio)
Padrão:[ ]
idx.previews.enable
Defina como true
para ativar as visualizações do IDX.
Esse recurso oferece uma maneira de executar e recarregar seus apps automaticamente à medida que eles são desenvolvidos.
Tipo: booleano
Padrão:true
Exemplo: true
.
idx.previews.previews
Visualizar configurações.
Defina os comandos que o IDX executa no seu ambiente de desenvolvedor.
Exemplo:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Tipo:conjunto de atributos de (submódulo)
Padrão:{ }
idx.previews.previews.<name>.command
Comando a ser executado
Tipo:lista de strings
Padrão:[ ]
idx.previews.previews.<name>.cwd
Diretório de trabalho
Tipo: string
Padrão:""
idx.previews.previews.<name>.env
Variáveis de ambiente a serem definidas.
Tipo:conjunto de atributos de string
Padrão:{ }
idx.previews.previews.<name>.manager
Gerente
Tipo: "Web", "flutter"
idx.workspace.onCreate
Comandos a serem executados quando o espaço de trabalho é criado e aberto pela primeira vez.
Isso pode ser útil para configurar o ambiente de desenvolvimento. Por exemplo, aqui
estamos especificando a npm install
para ser executada:
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
Tipo:conjunto de atributos de (caminho ou string)
Padrão:{ }
idx.workspace.onStart
Comandos a serem executados sempre que o espaço de trabalho for aberto.
Isso pode ser útil para iniciar observadores de compilação. Por exemplo, aqui estamos especificando dois comandos para executar:
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Tipo:conjunto de atributos de (caminho ou string)
Padrão:{ }
services.docker.enable
Define se o Docker sem raiz será ativado.
Tipo: booleano
Padrão:false
Exemplo: true
.
services.mysql.enable
Define se o servidor MySQL será ativado.
O servidor é inicializado com uma raiz de usuário sem senha. Portanto, para criar mais usuários e bancos de dados, use mysql -u root
. .
Tipo: booleano
Padrão:false
Exemplo: true
.
services.mysql.package
o pacote do MySQL a ser usado.
Tipo: pacote
Padrão:pkgs.mysql
Exemplo: pkgs.mysql80
.
services.postgres.enable
Define se o servidor PostgreSQL será ativado.
Tipo: booleano
Padrão:false
Exemplo: true
.
services.postgres.package
o pacote do PostgreSQL a ser usado.
Tipo: pacote
Padrão:pkgs.postgresql
Exemplo: pkgs.postgresql_15
.
services.postgres.extensions
Extensões do Postgres a serem instaladas.
type: list of (one de "age", "apache_datasketches", "cstore_fdw", "hypopg", "jsonb_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pg_cron", "pg_ed25519", "pg_embedh", "pg_hintmsql")
Padrão:[ ]
Exemplo: [ "pgvector" "postgis" ];
.
services.pubsub.enable
Define se o emulador do Google Pub/Sub será ativado.
Para mais documentação sobre como usar o emulador, acesse: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .
Tipo: booleano
Padrão:false
Exemplo: true
.
services.pubsub.port
Configura a porta em que o Pub/Sub vai detectar.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (ambos inclusos)
Padrão:8085
serviços.pubsub.ID do projeto
ID do projeto a ser usado para executar o emulador do Pub/Sub. Este projeto é apenas para testes. Ele não precisa existir e é usado apenas localmente.
Tipo:string correspondente ao padrão [a-z][a-z0-9-]{5,29}
Padrão:"idx-pubsub-emulator"
services.redis.enable
Define se o servidor Redis será ativado.
Tipo: booleano
Padrão:false
Exemplo: true
.
services.redis.port
Configura a porta que o Redis detectará.
Por padrão, o TCP está desativado e o Redis detecta apenas o /tmp/redis/redis.sock.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (ambos inclusos)
Padrão:0
services.spanner.enable
Define se o emulador do Google Cloud Spanner será ativado.
Tipo: booleano
Padrão:false
Exemplo: true
.
services.spanner.fault-injection
Define se a injeção de falhas aleatórias em transações será ativada.
Tipo: booleano
Padrão:false
Exemplo: true
.
services.spanner.grpc-port
A porta TCP a que o emulador precisa estar vinculado.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (ambos inclusos)
Padrão:9010
services.spanner.rest-port
A porta em que as solicitações REST são atendidas
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (ambos inclusos)
Padrão:9020