התאמה אישית של סביבת העבודה של IDX

Project IDX מאפשר לכם להתאים את סביבת העבודה לצרכים הייחודיים של הפרויקט, על ידי הגדרת קובץ תצורה אחד של .idx/dev.nix שמתאר:

  • כלי המערכת שצריכים להיות מסוגלים להפעיל (לדוגמה, מהטרמינל), כמו מהדרים או קבצים בינאריים אחרים.
  • התוספים הייחודיים (IDE) שצריך להתקין (לדוגמה, תמיכה בשפת תכנות).
  • איך תצוגות מקדימות של אפליקציות אמורות להופיע (לדוגמה, הפקודות להפעלת שרת האינטרנט).
  • משתני סביבה גלובליים שזמינים לשרתים מקומיים שפועלים בסביבת העבודה שלכם.

בחומר העזר בנושא dev.nix תוכלו לקרוא תיאור מלא של האפשרויות הזמינות.

Nix ו-IDX

IDX משתמש ב-Nix כדי להגדיר את תצורת הסביבה לכל סביבת עבודה. באופן ספציפי, ב-IDX משתמשים:

  • שפת התכנות Nix כדי לתאר את סביבות העבודה. Nix היא שפת תכנות פונקציונלית. המאפיינים וספריות החבילות שאפשר להגדיר בקובץ dev.nix תואמים לתחביר של קבוצת המאפיינים של Nix.

  • מנהל החבילות Nix לניהול כלי המערכת שזמינים לסביבת העבודה שלכם. הוא דומה למנהלי חבילות ספציפיים למערכת הפעלה, כמו APT (apt ו-apt-get), Homebrew (brew) ו-dpkg.

מכיוון שסביבות Nix ניתנות לשחזור והצהרתיות, בהקשר של IDX, המשמעות היא שאתם יכולים לשתף את קובץ התצורה של Nix כחלק ממאגר Git כדי להבטיח שלכל מי שעובד בפרויקט שלכם תהיה אותה הגדרת סביבה.

דוגמה בסיסית

בדוגמה הבאה מוצגת הגדרה בסיסית של הסביבה שמפעילה תצוגה מקדימה:

{ 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";
      };
    };
  };
}

הוספת כלי מערכת

כדי להוסיף כלי מערכת לסביבת העבודה, כמו מהדרים או תוכנות CLI לשירותי ענן, צריך למצוא את מזהה החבילה הייחודי במרשם של חבילת Nix ולהוסיף אותו לאובייקט packages של הקובץ dev.nix, עם הקידומת 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
  ];
  ...
}

הדרך הזו שונה מאופן ההתקנה הרגיל של חבילות מערכת באמצעות מנהלי חבילות ספציפיים למערכת הפעלה, כמו APT (apt ו-apt-get), Homebrew (brew) ו-dpkg. אם מתוארת באופן הצהרתי בדיוק אילו חבילות מערכת נדרשות, קל יותר לשתף ולשכפל את סביבות העבודה של IDX.

שימוש בקבצים בינאריים של צמתים מקומיים

בדיוק כמו במחשב המקומי, אפשר להפעיל קבצים בינאריים שקשורים לחבילות צומת שמותקנות באופן מקומי (כלומר חבילות ב-package.json) בחלונית טרמינל על-ידי הפעלה שלהם באמצעות הפקודה npx.

לנוחות נוספת, אם אתם נמצאים בספרייה עם תיקיית node_modules (כמו תיקיית השורש של פרויקט אינטרנט), אפשר להפעיל ישירות קבצים בינאריים שמותקנים באופן מקומי, ללא הקידומת npx.

הוספת gcloud רכיבים

הגדרת ברירת מחדל של gcloud CLI עבור Google Cloud זמינה לכל סביבות העבודה של IDX.

אם אתם צריכים רכיבים נוספים, תוכלו להוסיף אותם לקובץ dev.nix כך:

{ pkgs }: {
  packages = [
    ...
    (pkgs.google-cloud-sdk.withExtraComponents [
      pkgs.google-cloud-sdk.components.cloud-datastore-emulator
    ])
    ...
  ];
}

הוספה של תוספי IDE

יש שתי דרכים להתקין תוספים ב-IDX באמצעות מרשם התוספים OpenVSX:

  • שימוש בחלונית תוספים ב-IDX כדי לאתר תוספים ולהתקין אותם. הגישה הזו מתאימה במיוחד לתוספים ספציפיים למשתמש, כמו:

    • ערכות צבעים בהתאמה אישית
  • על ידי הוספת סיומות לקובץ dev.nix שלך. התוספים האלה יותקנו באופן אוטומטי כשתשתפו את ההגדרות של סביבת העבודה. הדרך הזו מתאימה במיוחד לתוספים ספציפיים לפרויקט, כמו:

    • תוספים לשפת תכנות, כולל כלי לניפוי באגים לפי שפה
    • התוספים הרשמיים לשירותי הענן שמשמשים את הפרויקט שלך
    • כלים לעיצוב קוד

בגישה השנייה, אפשר לכלול סיומות IDE בקובץ dev.nix על ידי איתור מזהה התוסף המוגדר במלואו (בצורה <publisher>.<id>) והוספתו לאובייקט idx.extensions, כך:

{ pkgs, ... }: {
  ...
  # Search for the extensions you want on https://open-vsx.org/ and use the format
  # "<publisher>.<id>"
  idx.extensions = [
    "angular.ng-template"
  ];
  ...
}

הוספת שירותים משותפים

ב-IDX יש גם הגדרה והגדרה פשוטות יותר בשביל שירותים נפוצים שאולי תצטרכו במהלך הפיתוח, כולל:

  • קונטיינרים
    • Docker (services.docker.*)
  • העברת הודעות
    • אמולטור Pub/Sub (services.pubsub.*)
  • מסדי נתונים
    • MySQL (services.mysql.*)
    • Postgres (services.postgres.*)
    • Redis (services.redis.*)
    • Spanner (services.spanner.*)

לפרטים על הפעלת השירותים האלה בסביבת העבודה, קראו את החלקים של services.* בחומר העזר בנושא dev.nix.

התאמה אישית של תצוגות מקדימות

לפרטים נוספים על התאמה אישית של התצוגות המקדימות של האפליקציות, עיינו במסמכי העזרה בנושא תצוגות מקדימות.

הצגת כל אפשרויות ההתאמה האישית

בחומר העזר בנושא dev.nix תוכלו לקרוא תיאור מפורט של הסכימה של הגדרת הסביבה.