تخصيص مساحة عمل IDX

الهدف من مشروع IDX هو أن يكون مفيدًا للمطوّرين قدر الإمكان. إحدى الطرق التي ينجز بها IDX

Nix + IDX

يستخدم IDX Nix لتحديد إعدادات البيئة لكل مساحة عمل. Nix هو مدير حزم وظيفي تمامًا ويعيّن معرّفات فريدة لكل تبعية، ما يعني في النهاية أنّ بيئتك يمكن أن تحتوي على إصدارات متعددة من نفس التبعية بسلاسة. كما أنها قابلة للتكرار والتوضيح. في سياق IDX، يعني ذلك أنه يمكنك مشاركة ملف إعداد Nix عبر مساحات العمل لتحميل إعداد البيئة نفسه.

يحدّد IDX بيئة المعاينة وإعدادات حزمة Workspace مباشرةً من مستودع الرموز باستخدام ملف .idx/dev.nix. تتّبع السمات ومكتبات الحزم التي يمكنك تحديدها في هذا الملف بنية مجموعة سمات Nix.

يوضح المثال التالي تهيئة بيئة أساسية لتمكين المعاينات:

{ 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 ومكتبات الحزم

طرود

حِزم يتم تثبيتها في البيئة

يمكنك استخدام الوسيطة pkgs لاختيار الحِزم لتثبيتها، على سبيل المثال: pkgs.python3. يُرجى العِلم أنّ محتوى pkgs يعتمد على خيار قناة channel الذي اخترته.

مثال:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

يمكنك البحث عن الحِزم المتوفّرة هنا: stable-23.11 أو غير ثابتة.

النوع: قائمة بالحِزم

الخيار التلقائي: [ ]

العضويات

nixpkgs لاستخدامها.

تُحدِّد هذه القناة محتوى الوسيطة pkgs.

النوع: واحد من "stable-23.05" أو "stable-23.11" أو "غير ثابت"

الخيار التلقائي: "stable-23.11"

env

متغيرات البيئة التي يتم ضبطها داخل بيئة المطوّرين.

يتم نشر هذه الواجهات إلى كل وحدات العرض وخادم المعاينة. يمكن أن تكون متغيرات البيئة مفيدة بشكل خاص إذا كان التطبيق يتطلب مجموعة محددة من المتغيرات.

مثال:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

النوع: مجموعة سمات أي عنصر

الخيار التلقائي: { }

idx.extensions

إضافات الرموز التي تريد تثبيتها في مساحة عمل IDX

هذه قائمة بأرقام تعريف الإضافات المؤهَّلة بالكامل، مثل ${publisherId}.${extensionId}.

يمكنك العثور على قائمة بالامتدادات المتاحة على Open VSX Registry وإدخالها في ملف dev.nix بحلول ${publisherId}.${extensionId}.

النوع: قائمة بـ (سلسلة أو مسار غير فارغ)

الخيار التلقائي: [ ]

idx.previews.enable

يجب ضبط هذا الحقل على true لتفعيل معاينات IDX.

توفّر هذه الميزة طريقة لتشغيل تطبيقاتك وإعادة تحميلها تلقائيًا أثناء تطويرها.

النوع: قيمة منطقية

الخيار التلقائي: true

مثال: true

idx.previews.previews

معاينة الإعدادات.

حدِّد الأوامر التي ينفّذها IDX في بيئة المطوِّر.

مثال:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

النوع: مجموعة السمات في (وحدة فرعية)

الخيار التلقائي: { }

idx.previews.previews.<name>.command

الأمر المطلوب تنفيذه

النوع: قائمة من السلاسل

الخيار التلقائي: [ ]

idx.previews.previews.<name>.cwd

دليل العمل

سلسلة النوع:

الخيار التلقائي: ""

idx.previews.previews.<name>.env

متغيرات البيئة المطلوب ضبطها.

النوع: مجموعة سمة من السلسلة

الخيار التلقائي: { }

idx.previews.previews.<name>.manager

مدير

النوع: أحد "web" أو "Flutter"

idx.workspace.onCreate

هي الأوامر التي يتم تنفيذها عند إنشاء مساحة العمل وفتحها للمرة الأولى.

يمكن أن يكون ذلك مفيدًا لإعداد بيئة التطوير. على سبيل المثال، نحدد هنا npm install لتشغيله:

{pkgs, ...}: {
  idx.workspace.
    npm-install = "npm install";
  };
}

النوع: مجموعة السمات من (مسار أو سلسلة)

الخيار التلقائي: { }

idx.workspace.onStart

الأوامر التي يتم تنفيذها كلما تم فتح مساحة العمل.

قد تكون هذه الطريقة مفيدة في جذب مشاهدين جدد. على سبيل المثال، نحدد هنا أمرين لتشغيلهما:

{pkgs, ...}: {
  idx.workspace.
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

النوع: مجموعة السمات من (مسار أو سلسلة)

الخيار التلقائي: { }

services.docker.enable

يحدِّد ذلك ما إذا كان سيتم تفعيل Dock بدون Rootless.

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.mysql.enable

ما إذا كان سيتم تفعيل خادم MySQL أم لا.

يتم إعداد الخادم باستخدام جذر مستخدم بدون كلمة مرور. لإنشاء مستخدمين إضافيين وإنشاء قواعد بيانات، استخدِم mysql -u root. .

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.mysql.package

حزمة MySQL للاستخدام.

النوع: حزمة

الخيار التلقائي: pkgs.mysql

مثال: pkgs.mysql80

services.postgres.enable

ما إذا كان سيتم تفعيل خادم PostgreSQL

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.postgres.package

حزمة PostgreSQL للاستخدام.

النوع: حزمة

الخيار التلقائي: pkgs.postgresql

مثال: pkgs.postgresql_15

services.postgres.extensions

بعد تثبيت الإضافات

Type:<br class="mq_mod_embeding,"g,pay_mod_تضمين,",g2l",gall

الخيار التلقائي: [ ]

مثال: [ "pgvector" "postgis" ];

services.pubsub.enable

لتحديد ما إذا كان سيتم تفعيل محاكي Google Pub/Sub.

ويمكن العثور على المزيد من المستندات حول استخدام المحاكي على الرابط التالي: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.pubsub.port

تحدِّد هذه السياسة المنفذ الذي سيستمع إليه Pub/Sub.

النوع: عدد صحيح غير موقَّع 16 بت؛ يتراوح بين 0 و65535 (كلاهما)

الخيار التلقائي: 8085

Services.pubsub.project-id

رقم تعريف المشروع المطلوب استخدامه لتشغيل محاكي النشر/الاشتراك هذا المشروع للاختبار فقط، وليس من الضروري أن يكون موجودًا ويتم استخدامه محليًا فقط.

النوع: سلسلة تطابق النمط [a-z][a-z0-9-]{5,29}

الخيار التلقائي: "idx-pubsub-emulator"

services.redis.enable

ما إذا كان سيتم تفعيل خادم Redis.

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.redis.port

تحدِّد هذه السياسة المنفذ الذي سيستمع Redis إليه.

يتم إيقاف tcp تلقائيًا ولا تستمع ميزة redis إلى الاستماع إلا على /tmp/redis/redis.sock.

النوع: عدد صحيح غير موقَّع 16 بت؛ يتراوح بين 0 و65535 (كلاهما)

الخيار التلقائي: 0

services.spanner.enable

لتحديد ما إذا كنت تريد تفعيل محاكي Google Cloud Spanner.

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.spanner.fault-injection

ما إذا كان سيتم تفعيل الحقن العشوائي للأخطاء في العمليات.

النوع: قيمة منطقية

الخيار التلقائي: false

مثال: true

services.spanner.grpc-port

منفذ TCP الذي يجب ربط المحاكي به.

النوع: عدد صحيح غير موقَّع 16 بت؛ يتراوح بين 0 و65535 (كلاهما)

الخيار التلقائي: 9010

Services.spanner.rest-port

المنفذ الذي يتم فيه عرض طلبات REST

النوع: عدد صحيح غير موقَّع 16 بت؛ يتراوح بين 0 و65535 (كلاهما)

الخيار التلقائي: 9020