IDX oferuje szeroką gamę wbudowanych szablonów obejmujących wszystkie pliki, pakiety systemowe (np. kompilatory) i rozszerzenia, których użytkownik może potrzebować, aby szybko rozpocząć pracę z językiem lub platformą.
Możesz także tworzyć własne szablony, które można konfigurować przez użytkowników. Na przykład:
Jeśli tworzysz własną platformę, bibliotekę lub usługę, możesz umożliwić użytkownikom szybkie rozpoczęcie pracy z technologią bez opuszczania przeglądarki, korzystając z pełnych możliwości maszyny wirtualnej w chmurze.
Jeśli masz preferowany stos technologiczny do swoich projektów, możesz uprościć własny proces rozpoczynania nowych projektów przy użyciu szablonu niestandardowego.
Jeśli uczysz innych, na przykład w ramach ćwiczeń z programowania, możesz usunąć niektóre początkowe kroki dla uczniów, konfigurując punkt początkowy ćwiczenia jako szablon niestandardowy.
Po przygotowaniu szablonu niestandardowego możesz utworzyć dla niego link i umieścić go w swojej witrynie, pliku README
repozytorium Git, na stronie szczegółów pakietu (np. w NPM) lub w innych miejscach, z których użytkownicy mogą chcieć zacząć korzystać z Twojej technologii.
Wymagania wstępne
Zanim zaczniesz, upewnij się, że wiesz, jak dostosowywać środowisko za pomocą plików .idx/dev.nix
.
W szablonach używa się też języka Nix, więc możesz odświeżyć podstawowe informacje lub zachować je jako materiał pomocniczy.
Struktura pliku szablonu
Szablon to publiczne repozytorium GitHub (albo folder lub gałąź w repozytorium), które zawiera co najmniej 2 pliki:
Tworzenie nowego obszaru roboczego z użyciem szablonu niestandardowego idx-template.json
zawiera metadane szablonu, w tym jego nazwę widoczną dla użytkowników, opis i parametry dostępne dla użytkowników do jego konfigurowania. Możesz na przykład zezwolić użytkownikom na wybór jednego z wielu języków programowania lub wskazać przykładowe zastosowania. IDX wykorzystuje te informacje, aby przygotować interfejs wyświetlany użytkownikom, którzy wybiorą nowy obszar roboczy na podstawie Twojego szablonu.idx-template.nix
to plik napisany w języku Nix, który zawiera skrypt powłoki Bash (opakowany w funkcję Nix) odpowiedzialny za:- Utworzę katalog roboczy nowego obszaru roboczego.
- Konfigurowanie środowiska przez utworzenie pliku
.idx/dev.nix
. Pamiętaj, że w tym skrypcie możesz też uruchomić narzędzie do tworzenia rusztowań projektu, takie jakflutter create
lubnpm init
, albo własny skrypt napisany w języku Go, Python, Node.js lub innym.
Ten plik zostanie uruchomiony z parametrami określonymi przez użytkownika podczas konfigurowania szablonu.
Obok tych 2 plików można dołączyć także inne pliki do wykorzystania w idx-template.nix
na potrzeby utworzenia instancji szablonu. Możesz na przykład uwzględnić końcowy plik .idx/dev.nix
, a nawet umieścić wszystkie pliki rusztowania bezpośrednio w repozytorium.
Podstawowy przykład: przekształcenie dowolnego publicznego repozytorium GitHub w szablon
Zanim przejdziemy do szczegółów definicji znaczników idx-template.json
i idx-template.nix
, warto przyjrzeć się podstawowym szablonom przykładowym, który:
- Nie zawiera parametrów, które można skonfigurować przez użytkownika
- Wystarczy skopiować wszystkie pliki z repozytorium szablonów (oprócz dwóch plików
idx-template
) do obszaru roboczego użytkownika. Powinien już istnieć podfolder.idx
z plikiemdev.nix
definiującym środowisko.
Dodanie poniższych plików do dowolnego publicznego repozytorium GitHub (lub podfolderu lub gałęzi) w praktyce przekształci to repozytorium w szablon 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}
'';
}
Używanie dodatkowych pakietów systemowych w skrypcie bootstrap
W poprzednim przykładzie używamy tylko podstawowych poleceń POSIX do kopiowania plików we właściwe miejsce. Skrypt bootstrap
Twojego szablonu może wymagać zainstalowania dodatkowych plików binarnych, np. git
, node
, python3
itp.
Możesz udostępnić dodatkowe pakiety systemowe dla skryptu wczytywania, określając packages
w pliku idx-template.nix
(tak samo jak w przypadku dostosowania obszaru roboczego za pomocą dodatkowych pakietów systemowych) – dodając do packages
w pliku dev.nix
.
Oto przykład dodawania elementu pkgs.nodejs
, który zawiera pliki binarne, takie jak node
, npx
i 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"
''
}
Dodaj parametry konfigurowane przez użytkownika
Aby umożliwić użytkownikom dostosowanie punktu początkowego dla nowego projektu, możesz utworzyć wiele szablonów lub jeden szablon z parametrami.
Jest to świetne rozwiązanie, gdy różne punkty początkowe to różne wartości przekazywane do narzędzia interfejsu wiersza poleceń (np. --language=js
i --language=ts
).
Aby dodać parametry:
- Opisz parametr w obiekcie
params
w pliku metadanychidx-template.json
. IDX wykorzystuje informacje z tego pliku, aby przygotować interfejs (np. pola wyboru, menu i pola tekstowe) wyświetlany użytkownikom szablonu. - Zaktualizuj proces wczytywania
idx-template.nix
, aby używać wartości wybranych przez użytkownika podczas tworzenia instancji szablonu.
Opisz swój parametr w polu idx-template.json
Oto przykład dodawania parametru enum
, który IDX wyświetla jako menu lub grupę przycisków w zależności od liczby opcji:
{
"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
}
]
}
Ponieważ istnieją 2 wartości (JavaScript i TypeScript), interfejs użytkownika renderuje grupę opcji dla 2 opcji i przekazuje wartość ts
lub js
do skryptu idx-template.nix
.
Każdy obiekt parametru ma te właściwości:
USŁUGA | TYP | OPIS |
---|---|---|
id | string |
Unikalny identyfikator parametru podobny do nazwy zmiennej. |
nazwa | string |
Wyświetlana nazwa tego parametru. |
Niestandardowy typ treści | string |
Określa komponent interfejsu, który zostanie użyty w przypadku tego parametru, oraz typ danych, które mają być przekazywane do skryptu wczytywania. Prawidłowe wartości to:
|
Opcje | object |
W przypadku parametrów enum jest to opcja wyświetlania użytkowników. Przykład: jeśli opcje to {"js": "JavaScript", ...} , opcja „JavaScript” będzie wyświetlana jako opcja, a po jej wybraniu wartość tego parametru to js . |
default | string lub boolean |
Ustawia wartość początkową w interfejsie użytkownika. W przypadku parametrów enum musi to być jeden z kluczy w parametrze options . W przypadku parametrów boolean powinna to być wartość true lub false . |
wymagane | boolean |
Wskazuje, że ten parametr jest wymagany. |
Używaj wartości parametrów w polu idx-template.nix
Po zdefiniowaniu obiektu params
w pliku idx-template.json
możesz zacząć dostosowywać skrypt wczytywania na podstawie wartości parametrów wybranych przez użytkownika.
Zgodnie z przykładem z poprzedniej sekcji, jeśli masz pojedynczy parametr o identyfikatorze language
, który jest wyliczeniem z możliwymi wartościami ts
lub js
, możesz go użyć w ten sposób:
# 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}
''
}
Innym typowym wzorcem jest warunkowe uwzględnianie treści w zależności od wartości ciągu. Inny sposób zapisu poprzedniego przykładu:
npm init --yes my-boot-strap@latest "$out" -- \
${if language == "ts" then "--lang=ts" else "--lang=js" }
Wybierz pliki, które mają być domyślnie otwierane
Dobrze jest dostosować, które pliki mają być otwierane do edycji podczas tworzenia nowych obszarów roboczych w szablonie. Na przykład jeśli szablon jest przeznaczony dla podstawowej witryny, możesz otworzyć główne pliki HTML, JavaScript i CSS.
Aby określić, które pliki powinny otwierać się domyślnie, zaktualizuj plik .idx/dev.nix
(nie plik idx-template.nix
), aby zawierał punkt zaczepienia obszaru roboczego onCreate
z atrybutem openFiles
. Na przykład:
# .idx/dev.nix
{pkgs}: {
...
idx = {
# Workspace lifecycle hooks
workspace = {
# Runs when a workspace is first created with this `dev.nix` file
onCreate = {
# 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 = { ... };
};
}
Tworzenie nowego obszaru roboczego na podstawie szablonu
Najprostszym sposobem na kompleksowe przetestowanie szablonu jest utworzenie z nim nowego obszaru roboczego. Kliknij ten link, zastępując przykład adresem URL repozytorium GitHub Twojego szablonu:
https://idx.google.com/new?template=https://github.com/my-org/my-repo
Możesz opcjonalnie dodać gałąź i podfolder. Wszystkie te warunki są prawidłowe, o ile są dostępne publicznie:
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
Jest to również adres URL, który udostępnisz innym, by mogli oni używać Twojego nowego szablonu. Adres URL, do którego prowadzi link, należy kliknąć przyciskiem „Otwórz w IDX”.
Udostępnij szablon
Gdy upewnisz się, że szablon działa zgodnie z oczekiwaniami, opublikuj go w repozytorium GitHub i udostępnij ten sam link, który został użyty podczas tworzenia obszaru roboczego do testowania.
Aby ułatwić użytkownikom znajdowanie Twojego szablonu, dodaj przycisk „Otwórz w IDX” do pliku README swojej witryny lub repozytorium.