IDX çalışma alanınızı özelleştirme

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