IDX طیف گستردهای از قالبهای داخلی را ارائه میکند که شامل تمام فایلها، بستههای سیستمی (مثلاً کامپایلرها) و افزونههایی است که یک کاربر ممکن است برای شروع سریع با یک زبان یا چارچوب نیاز داشته باشد.
همچنین ممکن است بخواهید الگوهای خود را با قابلیت تنظیم توسط کاربر ایجاد کنید. مثلا:
اگر چارچوب، کتابخانه یا سرویس خود را میسازید ، میتوانید با قدرت کامل یک ماشین مجازی مبتنی بر ابر، به کاربران خود اجازه دهید به سرعت با فناوری شما، بدون ترک مرورگر، شروع به کار کنند.
اگر پشته فناوری ترجیحی برای پروژه های خود دارید، می توانید فرآیند خود را برای شروع پروژه های جدید با یک الگوی سفارشی ساده کنید.
اگر به دیگران آموزش میدهید، مثلاً از طریق یک کد ، میتوانید برخی از مراحل اولیه را برای دانشآموزان خود با از قبل پیکربندی نقطه شروع برای Codelab خود به عنوان یک الگوی سفارشی حذف کنید.
هنگامی که یک الگوی سفارشی را آماده کردید، سپس میتوانید پیوندی برای قرار دادن آن در وبسایت، فایل README
مخزن Git، صفحه جزئیات بسته (مثلاً در NPM) یا مکانهای دیگری ایجاد کنید که کاربران ممکن است بخواهند از آنجا با فناوری شما شروع کنند. .
قبل از شروع، مطمئن شوید که با شخصی سازی محیط خود با فایل های .idx/dev.nix
آشنا هستید.
الگوها همچنین از زبان Nix استفاده میکنند، بنابراین ممکن است بخواهید برخی از اصول اولیه را بررسی کنید یا آن را به عنوان یک مرجع در دسترس خود نگه دارید.
یک الگو یک مخزن عمومی GitHub (یا پوشه یا شاخه در یک مخزن) است که حداقل شامل دو فایل است:
idx-template.json
شامل متادیتای قالب، از جمله نام قابل مشاهده توسط کاربر، توضیحات و پارامترهای موجود برای پیکربندی الگو در دسترس کاربران است. به عنوان مثال، می توانید به کاربران خود اجازه دهید تا از بین تعدادی از زبان های برنامه نویسی یا موارد استفاده مثالی انتخاب کنند. IDX از این اطلاعات برای آمادهسازی رابط کاربری که به کاربران نشان داده میشود، استفاده میکند.idx-template.nix
یک فایل نوشته شده با زبان Nix است که حاوی یک اسکریپت پوسته Bash (پیچیده شده در یک تابع Nix) است که مسئول این موارد است:- ایجاد دایرکتوری کاری فضای کاری جدید و
- راه اندازی محیط آن با ایجاد یک فایل
.idx/dev.nix
. توجه داشته باشید که شما همچنین می توانید یک ابزار scaffolding پروژه مانندflutter create
یاnpm init
در این اسکریپت اجرا کنید یا یک اسکریپت سفارشی نوشته شده در Go، Python، Node.js یا زبان دیگری را اجرا کنید.
این فایل با پارامترهای مشخص شده توسط کاربر هنگام پیکربندی قالب اجرا می شود.
ممکن است فایلهای دیگری در کنار این دو فایل برای استفاده در idx-template.nix
به منظور نمونهسازی الگو قرار داده شوند. برای مثال، میتوانید فایل نهایی .idx/dev.nix
را وارد کنید، یا حتی تمام فایلهای داربست را مستقیماً در مخزن قرار دهید.
قبل از پرداختن به جزئیات نحوه تعریف idx-template.json
و idx-template.nix
، مفید است که یک نمونه اولیه الگو را ببینید که:
- هیچ پارامتر قابل تنظیم توسط کاربر ندارد
- فقط تمام فایل های موجود در مخزن قالب شما (به جز دو فایل
idx-template
) را در فضای کاری کاربر کپی می کند. از قبل باید یک زیر پوشه.idx
با یک فایلdev.nix
وجود داشته باشد که محیط را تعریف می کند.
افزودن فایلهای زیر به هر مخزن عمومی GitHub (یا زیر پوشه یا شاخه) به طور موثر آن مخزن را به یک الگوی IDX تبدیل میکند.
idx-template.json
{
"name": "Hello world",
"description": "A template for a CLI program that prints 'hello world'",
"icon": "https://www.gstatic.com/images/branding/productlogos/idx/v1/192px.svg",
"params": []
}
idx-template.nix
# No user-configurable parameters
{ pkgs, ... }: {
# Shell script that produces the final environment
bootstrap = ''
# Copy the folder containing the `idx-template` files to the final
# project folder for the new workspace. ${./.} inserts the directory
# of the checked-out Git folder containing this template.
cp -rf ${./.} "$out"
# Set some permissions
chmod -R +w "$out"
# Remove the template files themselves and any connection to the template's
# Git repository
rm -rf "$out/.git" "$out/idx-template".{nix,json}
'';
}
bootstrap
خود استفاده کنید مثال قبلی فقط از دستورات پایه POSIX برای کپی فایل ها در جای مناسب استفاده می کند. اسکریپت bootstrap
قالب شما ممکن است نیاز به نصب باینری های اضافی مانند git
، node
، python3
یا موارد دیگر داشته باشد.
میتوانید با تعیین packages
در فایل idx-template.nix
بستههای سیستمی اضافی را در دسترس اسکریپت بوت استرپ خود قرار دهید، درست همانطور که یک فضای کاری را با بستههای سیستمی اضافی با افزودن به packages
موجود در فایل dev.nix
آن سفارشی میکنید.
در اینجا نمونه ای از افزودن pkgs.nodejs
آورده شده است که شامل باینری هایی مانند node
، npx
و npm
می شود:
# idx-template.nix
{pkgs}: {
packages = [
# Enable "node", "npm" and "npx" in the bootstrap script below.
# Note, this is NOT the list of packages available to the workspace once
# it's created. Those go in .idx/dev.nix
pkgs.nodejs
];
bootstrap = ''
mkdir "$out"
# We can now use "npm"
npm init --yes my-boot-strap@latest "$out"
''
}
برای اینکه به کاربران اجازه دهید نقطه شروع پروژه جدید خود را سفارشی کنند، می توانید چندین قالب ایجاد کنید یا یک الگو با پارامترها ایجاد کنید. این یک گزینه عالی است اگر نقاط شروع مختلف شما فقط مقادیر متفاوتی هستند که به یک ابزار CLI منتقل می شوند (به عنوان مثال --language=js
در مقابل --language=ts
).
برای اضافه کردن پارامترها، باید:
- پارامتر خود را در شی
params
فایل فوق دادهidx-template.json
خود شرح دهید. IDX از اطلاعات موجود در این فایل برای آماده سازی رابط کاربری (مانند چک باکس ها، کشویی ها و فیلدهای متنی) که به کاربران الگوی شما نشان داده شده است، استفاده می کند. - بوت استرپ
idx-template.nix
خود را به روز کنید تا از مقادیری که کاربر هنگام نمونه سازی الگو انتخاب کرده است استفاده کنید.
idx-template.json
شرح دهید در اینجا نمونه ای از افزودن یک پارامتر enum
است که IDX بسته به تعداد گزینه ها، آن را به عنوان یک منوی کشویی یا گروه دکمه رادیویی نشان می دهد.
{
"name": "Hello world",
"description": "A hello world app",
"params": [
{
"id": "language",
"name": "Programming Language",
"type": "enum",
"default": "ts",
"options": {
"js": "JavaScript",
"ts": "TypeScript"
},
"required": true
}
]
}
از آنجایی که دو مقدار وجود دارد (جاوا اسکریپت و تایپ اسکریپت)، رابط کاربری یک گروه دکمه رادیویی را برای دو گزینه ارائه می دهد و مقدار ts
یا js
به اسکریپت idx-template.nix
ارسال می کند.
هر شی پارامتر دارای ویژگی های زیر است:
ویژگی | تایپ کنید | شرح |
---|---|---|
شناسه | string | شناسه منحصر به فرد پارامتر، شبیه به نام متغیر. |
نام | string | نام نمایشی این پارامتر. |
نوع | string | مؤلفه UI برای استفاده برای این پارامتر و نوع داده برای ارسال به اسکریپت بوت استرپ را مشخص می کند. مقادیر معتبر عبارتند از:
|
گزینه ها | object | برای پارامترهای enum ، این گزینه هایی را برای نمایش کاربران نشان می دهد. به عنوان مثال اگر گزینهها {"js": "JavaScript", ...} ، "JavaScript" به عنوان گزینه نشان داده میشود و در صورت انتخاب مقدار این پارامتر js خواهد بود. |
پیش فرض | string یا boolean | مقدار اولیه را در UI تنظیم می کند. برای پارامترهای enum ، این باید یکی از کلیدهای options باشد. برای پارامترهای boolean ، این باید true یا false باشد. |
ضروری | boolean | نشان می دهد که این پارامتر مورد نیاز است. |
idx-template.nix
استفاده کنید پس از تعریف شیء params
در فایل idx-template.json
خود، می توانید سفارشی سازی اسکریپت بوت استرپ را بر اساس مقادیر پارامتری که کاربر انتخاب می کند شروع کنید.
به دنبال مثال در بخش قبل، اگر یک پارامتر با language
ID دارید که یک enum با مقادیر احتمالی ts
یا js
است، میتوانید از آن به این صورت استفاده کنید:
# idx-template.nix
# Accept additional arguments to this template corresponding to template
# parameter IDs, including default values (language=ts by default in this example).
{ pkgs, language ? "ts", ... }: {
packages = [
pkgs.nodejs
];
bootstrap = ''
# We use Nix string interpolation to pass the user's chosen programming
# language to our script.
npm init --yes my-boot-strap@latest "$out" -- --lang=${language}
''
}
یکی دیگر از الگوهای رایج این است که به صورت مشروط محتوا را بسته به مقدار یک رشته اضافه کنید. روش دیگر برای نوشتن مثال قبلی این است:
npm init --yes my-boot-strap@latest "$out" -- \
${if language == "ts" then "--lang=ts" else "--lang=js" }
وقتی فضاهای کاری جدید با قالب شما ایجاد می شود، ایده خوبی است که سفارشی کنید کدام فایل ها باید برای ویرایش باز شوند. به عنوان مثال، اگر قالب شما برای یک وب سایت اصلی است، ممکن است بخواهید فایل های اصلی HTML، جاوا اسکریپت و CSS را باز کنید.
برای سفارشی کردن فایلهایی که باید بهطور پیشفرض باز شوند، فایل .idx/dev.nix
خود را بهروزرسانی کنید ( نه فایل idx-template.nix
!) تا شامل یک قلاب فضای کاری onCreate
با ویژگی openFiles
باشد، مانند:
# .idx/dev.nix
{pkgs}: {
...
idx = {
# Workspace lifecycle hooks
workspace = {
# Runs when a workspace is first created with this `dev.nix` file
# Open editors for the following files by default, if they exist.
# The last file in the list will be focused.
default.openFiles = [
"src/index.css"
"src/index.js"
"src/index.html"
];
# Include other scripts here, as needed, for example:
# installDependencies = "npm install";
};
# To run something each time the workspace is (re)started, use the `onStart` hook
};
# Enable previews and customize configuration
previews = { ... };
};
}
ساده ترین راه برای آزمایش سرتاسر قالب، ایجاد یک فضای کاری جدید با آن است. از پیوند زیر دیدن کنید و نمونه را با URL مخزن GitHub الگوی خود جایگزین کنید:
https://idx.google.com/new?template=https://github.com/my-org/my-repo
می توانید به صورت اختیاری یک شاخه و زیرپوشه اضافه کنید. همه موارد زیر تا زمانی معتبر هستند که برای عموم قابل دسترسی باشند:
-
https://github.com/my-org/my-repo/
-
https://github.com/my-org/my-repo/tree/main/path/to/myidxtemplate
-
https://github.com/my-org/my-repo/tree/branch
-
https://github.com/my-org/my-repo/tree/branch/path/to/myidxtemplate
همچنین این نشانی اینترنتی است که با دیگران به اشتراک می گذارید تا بتوانند از الگوی جدید شما استفاده کنند، یا نشانی اینترنتی که از دکمه «باز کردن در IDX» به آن پیوند می دهید.
هنگامی که تأیید کردید که الگوی شما مطابق انتظار عمل می کند، آن را در یک مخزن GitHub منتشر کنید و همان پیوندی را که هنگام ایجاد یک فضای کاری برای آزمایش استفاده کردید، به اشتراک بگذارید.
و برای اینکه کاربران بتوانند الگوی شما را حتی آسان تر پیدا کنند، دکمه "باز کردن در IDX" را به وب سایت یا مخزن README خود اضافه کنید.