Salta ai contenuti

Licenza

Gestisci automaticamente i file LICENSE e le intestazioni del codice sorgente nel tuo workspace.

Questo generatore registra un generatore di sincronizzazione che viene eseguito come parte dei tuoi target lint per garantire che i file sorgente rispettino il contenuto e il formato della licenza desiderati, oltre a verificare che i file LICENSE dei progetti siano corretti e che le informazioni sulla licenza siano incluse nei file di progetto rilevanti (package.json, pyproject.toml).

Utilizzo

Esegui il generatore

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - license
  5. Compila i parametri richiesti
    • Clicca su Generate

    Opzioni

    Parametro Tipo Predefinito Descrizione
    license string Apache-2.0 SPDX License Identifier for your chosen license
    copyrightHolder string Amazon.com, Inc. or its affiliates The copyright holder, included in the LICENSE file and source file headers by default.

    Output del generatore

    Il generatore creerà o aggiornerà i seguenti file:

    • nx.json Il target lint è configurato per eseguire il generatore di sincronizzazione delle licenze
    • aws-nx-plugin.config.mts Configurazione per il generatore di sincronizzazione delle licenze

    Una configurazione predefinita per il contenuto e il formato delle intestazioni di licenza viene aggiunta a aws-nx-plugin.config.mts per scrivere intestazioni appropriate per diversi tipi di file. Potresti voler personalizzare ulteriormente questa configurazione; consulta la sezione di configurazione qui sotto.

    Workflow

    Ogni volta che costruisci i tuoi progetti (e viene eseguito un target lint), il generatore di sincronizzazione delle licenze si assicurerà che le licenze nei tuoi progetti corrispondano alla tua configurazione (vedi comportamento della sincronizzazione delle licenze qui sotto). Se rileva che qualcosa non è sincronizzato, riceverai un messaggio come:

    Terminal window
    NX The workspace is out of sync
    [@aws/nx-plugin:license#sync]: I file LICENSE del progetto non sono sincronizzati:
    - LICENSE
    - packages/<my-project>LICENSE
    I file package.json del progetto non sono sincronizzati:
    - package.json
    I file pyproject.toml del progetto non sono sincronizzati:
    - pyproject.toml
    - packages/<my-python-project>/pyproject.toml
    Le intestazioni di licenza non sono sincronizzate nei seguenti file sorgente:
    - packages/<my-project>/src/index.ts
    - packages/<my-python-project>/main.py
    Questo causerà un errore in CI.
    ? Desideri sincronizzare le modifiche identificate per aggiornare il workspace?
    Sì, sincronizza le modifiche ed esegui i task
    No, esegui i task senza sincronizzare le modifiche

    Seleziona per sincronizzare le modifiche.

    Comportamento della sincronizzazione delle licenze

    Il generatore di sincronizzazione esegue tre attività principali:

    1. Sincronizza le intestazioni di licenza nei file sorgente

    Quando viene eseguito, il generatore si assicura che tutti i file sorgente nel workspace (in base alla configurazione) contengano l’intestazione di licenza appropriata. L’intestazione viene scritta come primo commento a blocco o serie consecutiva di commenti a linea nel file (escludendo eventuali shebang/hashbang presenti).

    Puoi aggiornare la configurazione in qualsiasi momento per modificare quali file includere/escludere, oltre al contenuto o formato delle intestazioni per diversi tipi di file. Per maggiori dettagli, consulta la sezione di configurazione.

    2. Sincronizza i file LICENSE

    Il generatore verifica che il file LICENSE principale corrisponda alla licenza configurata, e che tutti i sottoprogetti nel workspace contengano il file LICENSE corretto.

    Puoi escludere progetti specifici nella configurazione. Per dettagli, vedi sezione di configurazione.

    3. Sincronizza le informazioni di licenza nei file di progetto

    Il generatore assicura che i campi license nei file package.json e pyproject.toml siano impostati secondo la licenza configurata.

    Puoi escludere progetti specifici nella configurazione. Per dettagli, vedi sezione di configurazione.

    Configurazione

    La configurazione è definita nel file aws-nx-plugin.config.mts nella root del workspace.

    La licenza selezionata può essere aggiornata in qualsiasi momento tramite la proprietà spdx:

    aws-nx-plugin.config.mts
    export default {
    license: {
    spdx: 'MIT',
    },
    } satisfies AwsNxPluginConfig;

    All’esecuzione del generatore, tutti i file LICENSE, package.json e pyproject.toml verranno aggiornati con la licenza configurata.

    Puoi inoltre configurare titolare e anno del copyright, inclusi in alcuni file LICENSE:

    aws-nx-plugin.config.mts
    export default {
    license: {
    spdx: 'MIT',
    copyrightHolder: 'Amazon.com, Inc. or its affiliates',
    copyrightYear: 2025,
    },
    } satisfies AwsNxPluginConfig;

    Intestazioni di licenza

    Contenuto

    Il contenuto dell’intestazione può essere configurato in due modi:

    1. Contenuto inline:
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: [
    'Copyright: My Company, Incorporated.',
    'Licensed under the MIT License',
    'All rights reserved',
    ];
    }
    // ... configurazione formato
    }
    }
    } satisfies AwsNxPluginConfig;
    1. Caricamento da file:
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    filePath: 'license-header.txt'; // relativo alla root del workspace
    }
    // ... configurazione formato
    }
    }
    } satisfies AwsNxPluginConfig;

    Formato

    Puoi specificare come formattare le intestazioni per diversi tipi di file usando pattern glob. Sono supportati commenti a linea, a blocco o combinazioni:

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['Copyright notice here'],
    },
    format: {
    // Commenti a linea
    '**/*.ts': {
    lineStart: '// ',
    },
    // Commenti a blocco
    '**/*.css': {
    blockStart: '/*',
    blockEnd: '*/',
    },
    // Commenti a blocco con prefissi
    '**/*.java': {
    blockStart: '/*',
    lineStart: ' * ',
    blockEnd: ' */',
    },
    // Commenti a linea con header/footer
    '**/*.py': {
    blockStart: '# ------------',
    lineStart: '# ',
    blockEnd: '# ------------',
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    Le opzioni di formato supportate:

    • blockStart: Testo prima del contenuto della licenza (es. per iniziare un blocco)
    • lineStart: Prefisso per ogni riga della licenza
    • lineEnd: Suffisso per ogni riga della licenza
    • blockEnd: Testo dopo il contenuto della licenza (es. per chiudere un blocco)

    Sintassi personalizzata per commenti

    Per tipi di file non supportati nativamente, puoi definire sintassi personalizzate per identificare le intestazioni esistenti:

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.xyz': {
    lineStart: '## ',
    },
    },
    commentSyntax: {
    xyz: {
    line: '##', // Sintassi per commenti a linea
    },
    abc: {
    block: {
    // Sintassi per commenti a blocco
    start: '<!--',
    end: '-->',
    },
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    Escludere file

    Per default, in repository git, tutti i file .gitignore vengono rispettati. In repository non git, tutti i file sono considerati a meno di esclusioni esplicite.

    Puoi escludere ulteriori file usando pattern glob:

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.ts': {
    lineStart: '// ',
    },
    },
    exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'],
    },
    },
    } satisfies AwsNxPluginConfig;

    Escludere file di progetto dalla sincronizzazione

    Tutti i file LICENSE, package.json e pyproject.toml vengono sincronizzati per default.

    Puoi escludere progetti o file specifici usando pattern glob:

    aws-nx-plugin.config.mts
    export default {
    license: {
    files: {
    exclude: [
    // non sincronizzare LICENSE, package.json o pyproject.toml
    'packages/excluded-project',
    // non sincronizzare LICENSE, ma sincronizza package.json/pyproject.toml
    'apps/internal/LICENSE',
    ];
    }
    }
    } satisfies AwsNxPluginConfig;

    Disabilitare la sincronizzazione delle licenze

    Per disabilitare il generatore:

    1. Rimuovi la sezione license da aws-nx-plugin.config.mts (o elimina il file)
    2. Rimuovi il generatore @aws/nx-plugin:license#sync da targetDefaults.lint.syncGenerators

    Per riattivare, esegui nuovamente il generatore license.