IDX projesinin amacı geliştiriciler için mümkün olduğunca faydalı olmaktır. IDX'in bunu başarma yollarından biri, geliştiricilere belirli bir proje için doğru araçları çalışma alanlarına yükleme özgürlüğü ve esnekliği vermek ve ayarları, çalışma alanlarının kendileri için uygun olacak şekilde özelleştirebilmesidir.
Nix + IDX
IDX, her çalışma alanı için ortam yapılandırmasını tanımlamak üzere Nix'i kullanır. Nix, tamamen işlevsel bir paket yöneticisidir ve her bağımlılığa benzersiz tanımlayıcılar atar. Bu da ortamınızın aynı bağımlılığın birden fazla sürümünü sorunsuz şekilde barındırabileceği anlamına gelir. Aynı zamanda tekrar oluşturulabilir ve bildirim temellidir. IDX bağlamında bu, aynı ortam yapılandırmasını yüklemek için Nix yapılandırma dosyanızı çalışma alanları arasında paylaşabileceğiniz anlamına gelir.
IDX, önizleme ortamını ve çalışma alanı paketi yapılandırmalarını doğrudan .idx/dev.nix
dosyasıyla kod deposundan tanımlar.
Bu dosyada tanımlayabileceğiniz özellikler ve paket kitaplıkları, Nix özellik grubu söz dizimine uyar.
Aşağıdaki örnekte, önizlemeleri etkinleştiren bir temel ortam yapılandırması gösterilmektedir:
{ 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 özellikleri ve paket kitaplıkları
paketler
Ortamda yüklenecek paketler.
Yüklenecek paketleri seçmek için pkgs
bağımsız değişkenini kullanabilirsiniz (örneğin, pkgs.python3
). pkgs
içeriğinin, belirlenen channel
kanal seçeneğine bağlı olduğunu unutmayın.
Örnek:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Mevcut paketleri burada arayabilirsiniz: stable-23.11 veya unstable.
Tür: Paket listesi
Varsayılan: [ ]
kanal
nixpkgs kanalına ekleyebilirsiniz.
Bu kanal, pkgs
bağımsız değişkeninin içeriğini tanımlar.
Tür: "kararlı-23.05", "kararlı-23.11", "kararsız" değerlerinden biri
Varsayılan: "stable-23.11"
env
Geliştirici ortamında ayarlanan ortam değişkenleri.
Bunlar tüm kabuklarınıza ve önizleme sunucusuna yayılır. Ortam değişkenleri, uygulamanız belirli bir değişken grubu gerektiriyorsa özellikle yararlı olabilir.
Örnek:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Tür: Herhangi bir özelliğin özellik kümesi
Varsayılan: { }
idx.extensions
IDX çalışma alanınıza yüklemek istediğiniz kod uzantılarını kullanın.
Bu, tam nitelikli uzantı kimliklerinin bir listesidir (örneğin, ${publisherId}.${extensionId}
).
Kullanılabilir uzantıların listesini VSX Kaydını Aç bölümünde bulabilir ve ${publisherId}.${extensionId}
tarihine kadar dev.nix
dosyanıza girebilirsiniz.
Tür: listesi (boş olmayan dize veya yol)
Varsayılan: [ ]
idx.previews.enable
IDX Önizlemelerini etkinleştirmek için bunu true
olarak ayarlayın.
Bu özellik, uygulamalarınızı geliştirirken uygulamalarınızı otomatik olarak çalıştırmanız ve yeniden yüklemeniz için bir yol sunar.
Tür: boole
Varsayılan: true
Örnek: true
idx.previews.previews
Yapılandırmaları önizleyin.
IDX'in geliştirici ortamınızda yürüttüğü komutları tanımlayın.
Örnek:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Tür: özellik kümesi (alt modül)
Varsayılan: { }
idx.previews.previews.<name>.command
Yürütme komutu
Tür: Dize listesi
Varsayılan: [ ]
idx.previews.previews.<name>.cwd
Çalışma dizini
Tür: dize
Varsayılan: ""
idx.previews.previews.<name>.env
Ayarlanacak ortam değişkenleri.
Tür: özellik dizesinin grubu
Varsayılan: { }
idx.previews.previews.<name>.manager
Yönetici
Tür: "web", "flutter" öğelerinden biri
idx.workspace.onCreate
Çalışma alanı ilk kez oluşturulduğunda ve açıldığında yürütülecek komutlar.
Bu, geliştirme ortamını ayarlarken faydalı olabilir. Örneğin, burada çalıştırılacak npm install
kodunu belirtiyoruz:
{pkgs, ...}: {
idx.workspace.
npm-install = "npm install";
};
}
Tür: özellik grubu (yol veya dize)
Varsayılan: { }
idx.workspace.onStart
Çalışma alanı açıldığında yürütülecek komutlar.
Bu, izleyiciler oluşturmaya başlamak için yararlı olabilir. Örneğin, burada çalıştırılacak 2 komut belirtiyoruz:
{pkgs, ...}: {
idx.workspace.
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
Tür: özellik grubu (yol veya dize)
Varsayılan: { }
services.docker.enable
Rootless docker'ın etkinleştirilip etkinleştirilmeyeceği.
Tür: boole
Varsayılan: false
Örnek: true
services.mysql.enable
MySQL sunucusunun etkinleştirilip etkinleştirilmeyeceği.
Sunucu, şifresiz bir kullanıcı kökü ile başlatıldı. Ek kullanıcılar oluşturmak ve veritabanları oluşturmak için mysql -u root
kullanın. .
Tür: boole
Varsayılan: false
Örnek: true
services.mysql.package
Kullanılacak MySQL paketi.
Tür: paket
Varsayılan: pkgs.mysql
Örnek: pkgs.mysql80
services.postgres.enable
PostgreSQL sunucusunun etkinleştirilip etkinleştirilmeyeceği.
Tür: boole
Varsayılan: false
Örnek: true
services.postgres.package
Kullanılacak PostgreSQL paketi.
Tür: paket
Varsayılan: pkgs.postgresql
Örnek: pkgs.postgresql_15
services.postgres.extensions
Yüklenecek postgres uzantıları.
Type: list of ("age", "apache_datasketches"age"age", "apache_datasketches", "cstore_fdw", "hypopg", "jsonb_deep_sum", "periods", "pg_auto_failover", "pg_bigm",
Varsayılan: [ ]
Örnek: [ "pgvector" "postgis" ];
services.pubsub.enable
Google Pub/Sub emülatörünün etkinleştirilip etkinleştirilmeyeceği.
Emülatörün kullanımıyla ilgili daha fazla belgeye şu adresten ulaşabilirsiniz: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .
Tür: boole
Varsayılan: false
Örnek: true
services.pubsub.port
Pub/Sub'ın dinlediği bağlantı noktasını yapılandırır.
Tür: 16 bit imzalanmamış tam sayı; 0 ile 65.535 arasında (her ikisi de dahil)
Varsayılan: 8085
services.pubsub.project-id
Pub/Sub emülatörünü çalıştırmak için kullanılacak proje kimliği. Bu proje yalnızca test amaçlıdır. Mevcut olması gerekmez ve yalnızca yerel olarak kullanılır.
Tür: [a-z][a-z0-9-] kalıbıyla eşleşen dize{5,29}
Varsayılan: "idx-pubsub-emulator"
services.redis.enable
Redis sunucusunun etkinleştirilip etkinleştirilmeyeceği.
Tür: boole
Varsayılan: false
Örnek: true
services.redis.port
Redis'in dinleyeceği bağlantı noktasını yapılandırır.
Varsayılan olarak TCP devre dışı bırakılır ve Redis yalnızca /tmp/redis/redis.sock dinler.
Tür: 16 bit imzalanmamış tam sayı; 0 ile 65.535 arasında (her ikisi de dahil)
Varsayılan: 0
services.spanner.enable
Google Cloud Spanner Emulator'ın etkinleştirilip etkinleştirilmeyeceği.
Tür: boole
Varsayılan: false
Örnek: true
services.spanner.fault-injection
Dönüşümlere rastgele hata eklemenin etkinleştirilip etkinleştirilmeyeceği.
Tür: boole
Varsayılan: false
Örnek: true
services.spanner.grpc-port
Emülatörün bağlanması gereken TCP bağlantı noktası.
Tür: 16 bit imzalanmamış tam sayı; 0 ile 65.535 arasında (her ikisi de dahil)
Varsayılan: 9010
services.spanner.rest-port
REST isteklerinin sunulduğu bağlantı noktası
Tür: 16 bit imzalanmamış tam sayı; 0 ile 65.535 arasında (her ikisi de dahil)
Varsayılan: 9020