Membuat template kustom

IDX menawarkan berbagai template bawaan yang menyertakan semua file, paket sistem (misalnya, compiler), dan ekstensi yang Anda perlukan untuk memulai bahasa atau framework dengan cepat.

Anda juga dapat meluncurkan ruang kerja IDX menggunakan template Komunitas yang dihosting di GitHub. Untuk mengetahui informasi selengkapnya tentang cara meluncurkan ruang kerja baru dari template, lihat Membuat ruang kerja.

Sebagian besar pengguna akan menggunakan template bawaan atau mengimpor project dari Git, tetapi untuk kasus penggunaan yang lebih canggih, Anda dapat membuat template sendiri:

  • Jika Anda mem-build framework, library, atau layanan sendiri, Anda dapat memungkinkan pengguna memulai teknologi Anda dengan cepat tanpa harus keluar dari browser, dengan kemampuan penuh virtual machine berbasis cloud.

  • Jika memiliki stack teknologi pilihan untuk project Anda, Anda dapat menyederhanakan proses Anda sendiri untuk memulai project baru dengan template kustom.

  • Jika Anda mengajar orang lain, seperti melalui tutorial atau codelab, Anda dapat menghapus beberapa langkah awal untuk siswa dengan mengonfigurasi titik awal untuk codelab sebagai template kustom.

Setelah membuat dan menguji template kustom, Anda dapat membuat link untuk template tersebut yang akan ditempatkan di situs, file README repositori Git, halaman detail paket (misalnya, di NPM), atau tempat lain yang Anda harapkan pengguna mulai menggunakan teknologi Anda.

Prasyarat

Sebelum Anda memulai:

Struktur file template

Template IDX adalah repositori Git publik (atau folder atau cabang dalam repositori) yang berisi minimal dua file:

  • Dialog yang dilihat pengguna saat mereka membuat ruang kerja baru dari template Anda
    Membuat ruang kerja baru dari template kustom

    idx-template.json menyertakan metadata untuk template, termasuk nama, deskripsi, dan parameter yang terlihat pengguna yang tersedia bagi pengguna untuk mengonfigurasi template. Misalnya, Anda dapat mengizinkan pengguna memilih dari sejumlah bahasa pemrograman, atau contoh kasus penggunaan. IDX menggunakan informasi ini untuk menyiapkan UI yang ditampilkan kepada pengguna saat mereka memilih untuk membuat ruang kerja baru dari template Anda.

  • idx-template.nix adalah file yang ditulis dengan bahasa Nix yang berisi skrip shell Bash (digabungkan dalam fungsi Nix) yang bertanggung jawab untuk:

    1. Membuat direktori kerja ruang kerja baru.
    2. Menyiapkan lingkungannya dengan membuat file .idx/dev.nix. Perhatikan bahwa Anda juga dapat menjalankan alat scaffolding project seperti flutter create atau npm init dalam skrip ini, atau menjalankan skrip kustom yang ditulis dalam Go, Python, Node.js, atau bahasa lain.

    File ini akan dieksekusi dengan parameter yang ditentukan oleh pengguna saat IDX memuat template.

File lain dapat disertakan bersama kedua file ini, untuk digunakan di idx-template.nix, guna membuat instance template. Misalnya, Anda dapat menyertakan file .idx/dev.nix final, atau bahkan menyertakan semua file scaffolding langsung di repositori.

Membuat template awal

Untuk mempercepat pembuatan template, sebaiknya Anda memulai dengan salah satu metode berikut untuk membuat template IDX yang dapat Anda sesuaikan lebih lanjut:

Contoh dasar: mengubah repositori GitHub publik menjadi template

Sebelum membahas detail cara menentukan idx-template.json dan idx-template.nix, sebaiknya lihat template contoh dasar yang:

  • Tidak memiliki parameter yang dapat dikonfigurasi pengguna
  • Cukup salin semua file di repositori template Anda (kecuali dua file idx-template) ke ruang kerja pengguna. Seharusnya sudah ada subfolder .idx dengan file dev.nix yang menentukan lingkungan.

Menambahkan file berikut ke repositori GitHub publik (atau subfolder atau cabang) akan mengubah repositori tersebut menjadi template IDX secara efektif.

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}
  '';
}

Lanjutkan ke Menyesuaikan template untuk mempelajari perubahan tambahan yang dapat Anda lakukan untuk menyesuaikan template.

Membuat template kustom menggunakan template resmi atau komunitas

Tim Project IDX mengelola dua repositori untuk template IDX:

  • Template resmi: Ini adalah template yang Anda pilih langsung dari dasbor IDX saat membuat aplikasi baru.

  • Template komunitas: Template ini memungkinkan kontribusi dari komunitas open source. Untuk menggunakan template komunitas, clone repositori Git Template komunitas. Anda dapat menggunakan link lengkap ke template yang ingin digunakan.

Untuk membuat template kustom dengan template yang ada sebagai dasar:

  1. Tentukan template yang akan digunakan sebagai dasar untuk template kustom Anda, lalu clone project.

  2. Sesuaikan idx-template.json, idx-template.nix, dan .idx/dev.nix sesuai kebutuhan, mulai dari Sesuaikan template Anda.

  3. Periksa perubahan di repositori Anda.

  4. Ikuti Membuat ruang kerja baru untuk template untuk men-deploy dan menguji template Anda. Jika Anda menggunakan repositori bertingkat, tautkan langsung ke repositori tersebut di URL Anda. Misalnya, jika menggunakan template "Vanilla Vite" komunitas, Anda akan menyediakan dan menguji ruang kerja baru menggunakan URL berikut:

    https://idx.google.com/new?template=https://github.com/project-idx/community-templates/tree/main/vite-vanilla
    

Lanjutkan ke Menyesuaikan template untuk mempelajari perubahan tambahan yang dapat Anda lakukan untuk menyesuaikan template.

Menyesuaikan template

Setelah membuat template dasar untuk dibuat, Anda dapat mengedit file idx-template.json, idx-template.nix, dan .idx/dev.nix agar sesuai dengan persyaratan Anda. Beberapa konfigurasi yang mungkin ingin Anda sesuaikan meliputi:

Menggunakan paket sistem tambahan dalam skrip bootstrap

Contoh dasar hanya menggunakan perintah POSIX dasar untuk menyalin file ke tempat yang tepat. Skrip bootstrap template Anda mungkin memerlukan biner tambahan untuk diinstal, seperti git, node, python3, atau lainnya.

Anda dapat menyediakan paket sistem tambahan ke skrip bootstrap dengan menentukan packages dalam file idx-template.nix, seperti yang Anda lakukan untuk menyesuaikan ruang kerja dengan paket sistem tambahan dengan menambahkan ke packages dalam file dev.nix.

Berikut adalah contoh penambahan pkgs.nodejs, yang mencakup biner seperti node, npx, dan 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"
  ''
}

Menambahkan parameter yang dapat dikonfigurasi pengguna

Agar pengguna dapat menyesuaikan titik awal untuk project baru mereka, Anda dapat membuat beberapa template, atau membuat satu template dengan parameter. Ini adalah opsi yang bagus jika titik awal yang berbeda hanyalah nilai yang berbeda yang diteruskan ke alat CLI (misalnya --language=js versus --language=ts).

Untuk menambahkan parameter, Anda harus:

  1. Jelaskan parameter Anda dalam objek params dari file metadata idx-template.json. IDX menggunakan informasi dalam file ini untuk menyiapkan UI (seperti kotak centang, drop-down, dan kolom teks) yang ditampilkan kepada pengguna template Anda.
  2. Perbarui bootstrap idx-template.nix untuk menggunakan nilai yang dipilih pengguna saat membuat instance template.

Jelaskan parameter Anda di idx-template.json

Berikut adalah contoh penambahan parameter enum, yang ditampilkan IDX sebagai menu drop-down atau grup tombol pilihan, bergantung pada jumlah opsi:

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

Karena ada dua nilai (JavaScript dan TypeScript), UI akan merender grup tombol pilihan untuk kedua opsi dan meneruskan nilai ts atau js ke skrip idx-template.nix.

Setiap objek parameter memiliki properti berikut:

PROPERTI JENIS DESKRIPSI
id string ID unik parameter, mirip dengan nama variabel.
nama string Nama tampilan untuk parameter ini.
jenis string

Menentukan komponen UI yang akan digunakan untuk parameter ini, dan jenis data yang akan diteruskan ke skrip bootstrap. Nilai yang valid adalah:

  • "enum" - Menampilkan grup tombol pilihan atau drop-down, dan meneruskan string ke bootstrap
  • "boolean" - Menampilkan kotak centang dan meneruskan true atau false
  • "text" - Menampilkan kolom teks dan meneruskan string
opsi object Untuk parameter enum, ini mewakili opsi yang akan ditampilkan kepada pengguna. Misalnya, jika opsi adalah {"js": "JavaScript", ...}, "JavaScript" akan ditampilkan sebagai opsi, dan saat dipilih, nilai parameter ini akan menjadi js.
default string atau boolean Menetapkan nilai awal di UI. Untuk parameter enum, ini harus berupa salah satu kunci di options. Untuk parameter boolean, nilainya harus true atau false.
wajib diisi boolean Menunjukkan bahwa parameter ini wajib diisi.

Menggunakan parameter value di idx-template.nix

Setelah menentukan objek params dalam file idx-template.json, Anda dapat mulai menyesuaikan skrip bootstrap berdasarkan parameter value yang dipilih pengguna.

Mengikuti contoh di bagian sebelumnya, jika Anda memiliki satu parameter dengan ID language yang merupakan enum dengan kemungkinan nilai ts atau js, Anda dapat menggunakannya seperti ini:

# 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}
  ''
}

Pola umum lainnya adalah menyertakan konten secara kondisional, bergantung pada nilai string. Cara lain untuk menulis contoh sebelumnya adalah:

npm init --yes my-boot-strap@latest "$out" -- \
    ${if language == "ts" then "--lang=ts" else "--lang=js" }

Memilih file yang akan dibuka secara default

Sebaiknya sesuaikan file yang harus dibuka untuk diedit saat ruang kerja baru dibuat dengan template Anda. Misalnya, jika template Anda ditujukan untuk situs dasar, sebaiknya buka file HTML, JavaScript, dan CSS utama.

Untuk menyesuaikan file yang akan dibuka secara default, perbarui file .idx/dev.nix (bukan file idx-template.nix Anda) untuk menyertakan hook ruang kerja onCreate dengan atribut openFiles, seperti ini:

# .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 = { ... };
  };
}

Memilih ikon ruang kerja default

Anda dapat memilih ikon default untuk ruang kerja yang dibuat dengan template, dengan menempatkan file PNG bernama icon.png di samping file dev.nix, di dalam direktori .idx.

Menguji template di ruang kerja baru

Cara termudah untuk menguji template Anda secara menyeluruh adalah dengan membuat ruang kerja baru dengan template tersebut. Buka link berikut, dengan mengganti contoh dengan URL repositori GitHub template Anda:

https://idx.google.com/new?template=https://github.com/my-org/my-repo

Anda dapat menyertakan cabang dan subfolder secara opsional. Semua hal berikut valid, selama dapat diakses secara publik:

  • 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

URL ini juga akan Anda bagikan kepada orang lain agar mereka dapat menggunakan template baru, atau URL yang akan Anda tautkan dari tombol "Buka di IDX".


Membagikan template

Setelah mengonfirmasi bahwa template Anda berperilaku seperti yang diharapkan, publikasikan ke repositori GitHub dan bagikan link yang sama dengan yang Anda gunakan saat membuat ruang kerja untuk pengujian.

Selain itu, untuk mempermudah pengguna menemukan template Anda, tambahkan tombol"Buka di IDX" ke README situs atau repositori Anda.