המטרה של Project IDX היא להיות שימושיים ככל האפשר למפתחים. אחת מהדרכים שבהן IDX עושה זאת היא לתת למפתחים חופש וגמישות להתקין את הכלים המתאימים לכל פרויקט נתון בסביבת העבודה שלהם, ולהתאים אישית את ההגדרות כך שסביבות העבודה שלהם יתאימו להם.
Nix + IDX
IDX משתמש ב-Nix כדי להגדיר את הגדרות הסביבה לכל סביבת עבודה. Nix הוא מנהל חבילות שמתפקד במלואו, והוא מקצה מזהים ייחודיים לכל תלות, וכתוצאה מכך בסופו של דבר הסביבה שלכם יכולה להכיל מספר גרסאות של אותה תלות בצורה חלקה. הוא גם ניתן לשחזור ולהצהרה. בהקשר של IDX, המשמעות היא שאתם יכולים לשתף את קובץ התצורה של Nix בין סביבות עבודה כדי לטעון את אותה ההגדרה של הסביבה.
IDX מגדיר את סביבת התצוגה המקדימה ואת ההגדרות של חבילות סביבת העבודה ישירות ממאגר הקודים עם הקובץ .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 או unstable.
סוג: רשימת החבילה
ברירת מחדל: [ ]
ערוץ
של ערוץ nixpkgs לשימוש.
הערוץ הזה מגדיר את התוכן של הארגומנט pkgs
.
סוג: אחד מהערכים "stable-23.05", "stable-23.11", "unstable"
ברירת מחדל: "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
האם להפעיל את עגינה ללא Root.
סוג: בוליאני
ברירת מחדל: 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
תוספי Postgres להתקנה.
"Type: list of (one of "age", "apache_datasketches", "cstore_fdw", "hypopg", "jsonb_deep_sum", "periods", "pg_auto_failover", "pg_autopdata",
ברירת מחדל: [ ]
לדוגמה: [ "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
מזהה הפרויקט שמשמש להפעלת אמולטור Pub/Sub. הפרויקט הזה מיועד לבדיקה בלבד. הוא לא חייב להיות קיים ומשמש רק באופן מקומי.
סוג: מחרוזת שתואמת לדפוס [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 Emulator.
סוג: בוליאני
ברירת מחדל: 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