> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Come creare il tuo file package.json

> Guida completa al file package.json in Node.js: scopri come crearlo, configurare gli script, gestire le dipendenze e preparare il tuo progetto per il deploy in produzione.

# 📋 File package.json per Node.js

Il file `package.json` è il cuore di qualsiasi progetto Node.js. Funge da manifesto che elenca le dipendenze, definisce gli script di automazione e configura il comportamento del progetto.

Questa guida insegna come configurare un `package.json` robusto, garantendo che il tuo progetto sia riproducibile, organizzato e compatibile con l'ambiente di Square Cloud.

***

<Steps>
  <Step title="Inizializza il progetto">
    Il modo più sicuro per creare il file è utilizzare la CLI di NPM. Naviga alla radice del tuo progetto e scegli una delle opzioni:

    **Opzione A: Interattiva (Consigliata per i principianti)**
    Rispondi alle domande passo dopo passo per configurare metadati personalizzati.

    ```bash theme={null}
    npm init
    ```

    **Opzione B: Automatica (Predefinita)**
    Genera il file immediatamente accettando tutte le impostazioni predefinite.

    ```bash theme={null}
    npm init -y
    ```
  </Step>

  <Step title="Configura i metadati essenziali">
    Apri il `package.json` generato. Per un progetto professionale, assicurati che questi campi siano compilati correttamente:

    * `name`: Identificatore univoco del progetto (usa kebab-case, ad es. `my-project-api`).
    * `version`: Segue lo standard SemVer (ad es. `1.0.0`).
    * `main`: Il punto di ingresso dell'applicazione (di solito `index.js` o `src/index.js`).
    * `type`: Imposta come `"module"` se usi ES Modules (import/export) oppure rimuovilo per usare CommonJS (require).
  </Step>

  <Step title="Configura gli script di esecuzione">
    La sezione `scripts` è fondamentale per l'automazione. È qui che definisci come la tua applicazione deve essere avviata, testata o compilata.

    ```json theme={null}
    "scripts": {
      "start": "node index.js",
      "test": "echo \"Error: no test specified\" && exit 1"
    }
    ```

    **A proposito dell'inizializzazione su Square Cloud:**
    Sebbene l'ambiente cerchi pattern comuni, Square Cloud offre piena flessibilità. Puoi (e dovresti) configurare esplicitamente quale comando il sistema deve eseguire per avviare la tua applicazione.

    Ad esempio, puoi configurare il **Start Command** nella dashboard o nel file di configurazione di Square per eseguire `npm run start`, assicurando che lo script definito sopra venga rispettato.
  </Step>

  <Step title="Gestisci le dipendenze">
    Qui risiedono le librerie essenziali affinché il tuo codice venga eseguito in produzione. Per installare e salvare automaticamente in questo elenco:

    ```bash theme={null}
    npm install package-name
    ```

    **Attenzione a `devDependencies` e Build su Square Cloud:**
    Gli strumenti utilizzati solo nello sviluppo locale (come `eslint` o `prettier`) restano in `devDependencies`.

    <Warning>
      **Importante:** Square Cloud esegue l'installazione in modalità produzione per impostazione predefinita, il che significa che i pacchetti elencati in `devDependencies` **NON** vengono installati.

      Se hai bisogno di eseguire un processo di **build** nel cloud (ad es. compilare TypeScript o eseguire script post-install), devi spostare questi strumenti in `dependencies`. In caso contrario, la build fallirà a causa dei pacchetti mancanti.
    </Warning>
  </Step>

  <Step title="Usa le funzionalità avanzate">
    Per progetti più complessi, `package.json` offre potenti funzionalità di controllo:

    **1. Overrides (Forzare le versioni):**
    Utile quando una dipendenza che usi installa una sotto-dipendenza con più vulnerabilità. Puoi forzare la risoluzione a una versione sicura:

    ```json theme={null}
    "overrides": {
      "vulnerable-package": "2.0.1"
    }
    ```

    **2. Imports (Alias di percorso):**
    Evita lunghi percorsi relativi come `../../../utils`. Con `imports`, crei scorciatoie interne native (richiede una versione recente di Node):

    ```json theme={null}
    "imports": {
      "#utils/*": "./src/utils/*.js",
      "#database": "./src/core/database.js"
    }
    ```

    Questo consente di importare nel codice usando `import db from '#database'`.
  </Step>
</Steps>

***

## 💡 Consigli e buone pratiche

* **Versionamento semantico**: Preferisci fissare le versioni critiche rimuovendo `^` (ad es. usa `"14.14.1"` invece di `"^14.14.1"`) per evitare che gli aggiornamenti automatici compromettano il tuo codice in produzione.
* **Sicurezza**: Esegui `npm audit` regolarmente per identificare le vulnerabilità nelle tue dipendenze. Il campo `overrides` illustrato sopra è la soluzione ideale per risolvere questi problemi.
* **Package-lock.json**: Non eliminare né ignorare mai questo file in `.gitignore`. È la garanzia che Square Cloud installerà l'esatto albero delle dipendenze che ha funzionato sulla tua macchina.
* **Organizzazione**: Mantieni il file pulito. Se la sezione `scripts` diventa troppo grande, considera l'uso di strumenti di automazione esterni o la suddivisione in file.

***

## 📄 Esempio finale di file

Di seguito, un esempio di un `package.json` moderno e ottimizzato:

```json package.json theme={null}
{
  "name": "square-cloud-project",
  "version": "1.0.0",
  "description": "Professional Node.js API",
  "main": "src/index.js",
  "type": "module",
  "scripts": {
    "start": "node src/index.js",
    "lint": "eslint ."
  },
  "imports": {
    "#services/*": "./src/services/*.js"
  },
  "dependencies": {
    "discord.js": "14.14.1",
    "dotenv": "16.3.1",
    "typescript": "5.3.3" 
  },
  "devDependencies": {
    "eslint": "8.56.0"
  }
}
```

***

## 🚀 Prossimi passi

Con il tuo file `package.json` configurato:

1. Effettua il commit nel tuo repository Git.
2. Ospita il tuo progetto su **Square Cloud**.
3. Configura il deploy automatico tramite GitHub.
4. Benvenuto nell'hosting professionale di applicazioni Node.js!

Un file `package.json` ben strutturato è la base per qualsiasi applicazione Node.js di successo, garantendo che la tua applicazione funzioni perfettamente su Square Cloud.
