המטרה של 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";
};
}
Type: קבוצת המאפיינים של כל דבר
ברירת מחדל:
{ }
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.*.command
פקודה להפעלה
סוג: רשימה של מחרוזת
ברירת מחדל:
[ ]
idx.previews.previews.*.cwd
ספריית עבודה
סוג: מחרוזת
ברירת מחדל:
""
idx.previews.previews.*.env
משתני סביבה להגדרה.
סוג: קבוצת המאפיינים של המחרוזת
ברירת מחדל:
{ }
idx.previews.previews.*.manager
ניהול
סוג:
אחד מתוך web
, flutter
idx.workspace.onCreate
פקודות להפעלה בזמן שיוצרים את סביבת העבודה ופותחים אותה בפעם הראשונה.
האפשרות הזאת יכולה להיות שימושית כדי להגדיר את סביבת הפיתוח. לדוגמה, כאן מציינים את npm install
שרוצים להריץ:
{pkgs, ...}: {
idx.workspace.onCreate = {
npm-install = "npm install";
};
}
סוג: קבוצת מאפיינים של (נתיב או מחרוזת)
ברירת מחדל:
{ }
idx.workspace.onStart
פקודות להפעלה בכל פעם שסביבת העבודה נפתחת.
המידע הזה יכול להיות שימושי כדי להתחיל ליצור צופים. לדוגמה, כאן מציינים 2 פקודות להרצה:
{pkgs, ...}: {
idx.workspace.onStart = {
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
};
}
סוג: קבוצת מאפיינים של (נתיב או מחרוזת)
ברירת מחדל:
{ }
services.docker.enable
האם להפעיל את עגינה ללא Root.
סוג: בוליאני
ברירת מחדל:
false
לדוגמה:
true