Creare un modello personalizzato

Firebase Studio offre un'ampia gamma di modelli integrati che includono tutti i file, i pacchettidi sistema (ad esempio i compilatori) e le estensioni di cui hai bisogno per iniziare rapidamente a utilizzare un linguaggio o un framework.

Puoi anche avviare un'area di lavoro Firebase Studio utilizzando i modelli della community ospitati su GitHub. Per saperne di più sull'avvio di una nuova area di lavoro da un modello, consulta Creare un' Firebase Studio area di lavoro.

La maggior parte degli utenti utilizzerà i modelli integrati o importerà i progetti da Git, ma per casi d'uso più avanzati puoi creare i tuoi modelli:

  • Se stai creando un framework, una libreria o un servizio, puoi consentire ai tuoi utenti di iniziare rapidamente a utilizzare la tua tecnologia senza mai uscire dal browser, con tutta la potenza di una macchina virtuale basata su cloud.

  • Se hai uno stack tecnologico preferito per i tuoi progetti, puoi semplificare la procedura di avvio di nuovi progetti con un modello personalizzato.

  • Se insegni ad altri, ad esempio tramite un tutorial o un codelab, puoi rimuovere alcuni dei passaggi iniziali per i tuoi studenti preconfigurando il punto di partenza del codelab come modello personalizzato.

Dopo aver creato e testato il modello personalizzato, puoi creare un link per inserirlo nel tuo sito web, nel file README del repository Git , nella pagina dei dettagli del pacchetto (ad esempio in NPM) o in qualsiasi altro luogo in cui prevedi che gli utenti inizino a utilizzare la tua tecnologia.

Prerequisiti

Prima di iniziare:

  • Scopri come utilizzare il file idx/dev.nix per personalizzare l'ambiente.

  • Acquisisci familiarità con le nozioni di base del linguaggio Nix e tieni a portata di mano il riferimento.

Struttura dei file dei modelli

Un modello Firebase Studio è un repository Git pubblico (o una cartella o un ramo in un repository) che contiene almeno due file:

  • idx-template.json include i metadati del modello, tra cui il nome visibile all'utente, la descrizione e i parametri disponibili per gli utenti per configurare il modello. Ad esempio, puoi consentire agli utenti di scegliere tra una serie di linguaggi di programmazione o casi d'uso di esempio. Firebase Studio utilizza queste informazioni per preparare l'interfaccia utente mostrata agli utenti quando scelgono di creare una nuova area di lavoro dal tuo modello.

  • idx-template.nix è un file scritto con il linguaggio Nix che contiene uno script della shell Bash (racchiuso in una funzione Nix) che:

    1. Crea la directory di lavoro per la nuova area di lavoro.

    2. Configura l'ambiente creando un file .idx/dev.nix. Tieni presente che puoi anche eseguire uno strumento di scaffolding del progetto come flutter create o npm init in questo script oppure eseguire uno script personalizzato scritto in Go, Python, Node.js o un altro linguaggio.

      Questo file verrà eseguito con i parametri specificati dall'utente quando Firebase Studio carica il modello.

Oltre a questi due file, possono essere inclusi altri file da utilizzare in idx-template.nix per creare un'istanza del modello. Ad esempio, puoi includere il file .idx/dev.nix finale o persino tutti i file di scaffolding direttamente nel repository.

Creare un modello di base

Per velocizzare la creazione dei modelli, ti consigliamo di iniziare con uno dei seguenti metodi per creare un modello Firebase Studio che puoi personalizzare ulteriormente:

Un esempio di base: trasformare qualsiasi repository GitHub pubblico in un modello

Prima di entrare nei dettagli su come definire idx-template.json e idx-template.nix, è utile vedere un modello di base di esempio che:

  • Non contiene parametri configurabili dall'utente.
  • Copia tutti i file nel repository dei modelli (ad eccezione dei due file idx-template) nell'area di lavoro dell'utente. Dovrebbe già esistere una sottocartella .idx con un file dev.nix che definisce l'ambiente.

Se aggiungi i seguenti file a qualsiasi repository GitHub pubblico (o sottocartella o ramo), il repository viene trasformato in un Firebase Studio modello.

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

Vai a Personalizzare il modello per scoprire altre modifiche che puoi apportare per personalizzare il modello.

Creare un modello personalizzato utilizzando un modello ufficiale o della community

Il team Firebase Studio gestisce due repository per Firebase Studio modelli:

  • Modelli ufficiali: sono i modelli che selezioni direttamente dalla Firebase Studio dashboard quando crei una nuova app.

  • Modelli della community: Questi modelli consentono i contributi della community open source. Per utilizzare un modello della community, clona il repository Git dei modelli della community. Puoi utilizzare il link completo al modello che vuoi utilizzare.

Per creare un modello personalizzato con un modello esistente come base:

  1. Decidi quale modello utilizzare come base per il modello personalizzato, quindi clona il progetto.

  2. Personalizza idx-template.json, idx-template.nix e .idx/dev.nix in base alle esigenze, a partire da Personalizzare il modello.

  3. Esegui il check-in delle modifiche nel repository.

  4. Segui la procedura descritta in Creare una nuova area di lavoro per il modello per pubblicare e testare il modello. Se utilizzi un repository nidificato, collegalo direttamente nell'URL. Ad esempio, se utilizzi il modello della community "Vanilla Vite", devi eseguire il provisioning e testare una nuova area di lavoro utilizzando il seguente URL:

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

Vai a Personalizzare il modello per scoprire altre modifiche che puoi apportare per personalizzare il modello.

Personalizzare il modello

Ora che hai creato un modello di base su cui basarti, puoi modificare i file idx-template.json, idx-template.nix e .idx/dev.nix in base alle tue esigenze. Potresti voler personalizzare altre configurazioni:

Utilizzare pacchetti di sistema aggiuntivi nello script bootstrap

L'esempio di base utilizza solo i comandi POSIX di base per copiare i file nella posizione corretta. Lo script bootstrap del modello potrebbe richiedere l'installazione di altri file binari, come git, node, python3 o altri.

Puoi rendere disponibili altri pacchetti di sistema allo script di bootstrap specificando packages nel file idx-template.nix, proprio come faresti per personalizzare un'area di lavoro con pacchetti di sistema aggiuntivi aggiungendoli a packages nel file dev.nix.

Ecco un esempio di aggiunta di pkgs.nodejs, che include file binari come node, npx e 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"
  ''
}

Aggiungere parametri configurabili dall'utente

Per consentire agli utenti di personalizzare il punto di partenza del nuovo progetto, puoi creare più modelli o un singolo modello con parametri. Questa è un'ottima opzione se i diversi punti di partenza sono solo valori diversi passati a uno strumento CLI (ad esempio --language=js rispetto a --language=ts).

Per aggiungere parametri:

  1. Descrivi il parametro nell'oggetto params del file di metadati idx-template.json. Firebase Studio utilizza le informazioni contenute in questo file per preparare l'interfaccia utente (ad esempio caselle di controllo, menu a discesa e campi di testo) mostrata agli utenti del modello.
  2. Aggiorna il bootstrap idx-template.nix per utilizzare i valori selezionati dall'utente durante la creazione dell'istanza del modello.

Descrivere il parametro in idx-template.json

Ecco un esempio di aggiunta di un parametro enum, che Firebase Studio mostra come menu a discesa o gruppo di pulsanti di opzione, a seconda del numero di opzioni:

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

Poiché esistono due valori (JavaScript e TypeScript), l'interfaccia utente visualizzerà un gruppo di pulsanti di opzione per le due opzioni e passerà il valore ts o js allo script idx-template.nix.

Ogni oggetto parametro ha le seguenti proprietà:

PROPRIETÀ TIPO DESCRIZIONE
id string L'ID univoco del parametro, simile a un nome di variabile.
name string Il nome visualizzato per questo parametro.
type string

Specifica il componente dell'interfaccia utente da utilizzare per questo parametro e il tipo di dati da passare allo script di bootstrap. I valori validi sono:

  • "enum" - Mostra un menu a discesa o un gruppo di pulsanti di opzione e passa un string al bootstrap
  • "boolean" - Mostra una casella di controllo e passa true o false
  • "text" - Mostra un campo di testo e passa un string
options object Per i parametri enum, rappresenta le opzioni da mostrare agli utenti. Ad esempio, se le opzioni sono {"js": "JavaScript", ...}, "JavaScript" verrà visualizzato come opzione e, se selezionato, il valore di questo parametro sarà js.
default string o boolean Imposta il valore iniziale nell'interfaccia utente. Per i parametri enum, deve essere una delle chiavi in options. Per i parametri boolean, deve essere true o false.
required boolean Indica che questo parametro è obbligatorio.

Utilizzare i valori dei parametri in idx-template.nix

Dopo aver definito l'oggetto params nel file idx-template.json, puoi iniziare a personalizzare lo script di bootstrap in base ai valori dei parametri scelti dall'utente.

Seguendo l'esempio nella sezione precedente, se hai un singolo parametro con ID language che è un'enumerazione con valori possibili ts o js, puoi utilizzarlo nel seguente modo:

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

Un altro pattern comune consiste nell'includere in modo condizionale i contenuti a seconda del valore di una stringa. Un altro modo per scrivere l'esempio precedente è:

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

Scegliere i file da aprire per impostazione predefinita

È consigliabile personalizzare i file da aprire per la modifica quando vengono create nuove aree di lavoro con il modello. Ad esempio, se il modello è per un sito web di base, potresti voler aprire i file HTML, JavaScript e CSS principali.

Per personalizzare i file da aprire per impostazione predefinita, aggiorna il file .idx/dev.nix (non il file idx-template.nix!) in modo da includere un hook dell'area di lavoro onCreate con un attributo openFiles, come segue:

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

Scegliere un'icona predefinita per l'area di lavoro

Puoi scegliere l'icona predefinita per le aree di lavoro create con il tuo modello inserendo un file PNG denominato icon.png accanto al file dev.nix, all'interno della directory .idx.

Testare il modello in una nuova area di lavoro

Il modo più semplice per testare il modello end-to-end è creare una nuova area di lavoro con il modello. Visita il seguente link, sostituendo l'esempio con l'URL del repository GitHub del modello:

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

Se vuoi, puoi includere un ramo e una sottocartella. Tutti i seguenti sono validi, purché siano accessibili pubblicamente:

  • 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

Questo è anche l'URL che condividerai con altri utenti in modo che possano utilizzare il tuo nuovo modello o l'URL a cui rimanderai dal tuo "Apri in Firebase Studio" pulsante.


Condividere il modello

Dopo aver verificato che il modello si comporti come previsto, pubblicalo in un repository GitHub e condividi lo stesso link che hai utilizzato quando hai creato un'area di lavoro per i test.

Per semplificare ulteriormente la ricerca del modello da parte degli utenti, aggiungi un "Apri in Firebase Studio" pulsante al tuo sito web o al file README del repository.