Licence
Gérez automatiquement les fichiers LICENSE
et les en-têtes de code source dans votre espace de travail.
Ce générateur enregistre un générateur de synchronisation qui s’exécute dans le cadre de vos cibles lint
pour garantir que vos fichiers sources respectent le contenu et le format de licence souhaités, ainsi que la validité des fichiers LICENSE
de vos projets et l’inclusion des informations de licence dans les fichiers de projet concernés (package.json
, pyproject.toml
).
Utilisation
Exécuter le générateur
- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)
dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - license
- Remplissez les paramètres requis
- Cliquez sur
Generate
pnpm nx g @aws/nx-plugin:license
yarn nx g @aws/nx-plugin:license
npx nx g @aws/nx-plugin:license
bunx nx g @aws/nx-plugin:license
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
pnpm nx g @aws/nx-plugin:license --dry-run
yarn nx g @aws/nx-plugin:license --dry-run
npx nx g @aws/nx-plugin:license --dry-run
bunx nx g @aws/nx-plugin:license --dry-run
Options
Paramètre | Type | Par défaut | Description |
---|---|---|---|
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. |
Résultat du générateur
Le générateur créera ou mettra à jour les fichiers suivants :
- nx.json La cible lint est configurée pour exécuter le générateur de synchronisation des licences
- aws-nx-plugin.config.mts Configuration du générateur de synchronisation des licences
Une configuration par défaut pour le contenu et le format des en-têtes de licence est ajoutée à aws-nx-plugin.config.mts
pour générer des en-têtes appropriés pour plusieurs types de fichiers. Vous pouvez personnaliser cette configuration ; consultez la section de configuration ci-dessous.
Workflow
Lorsque vous construisez vos projets (et qu’une cible lint
s’exécute), le générateur de synchronisation des licences vérifiera que les licences correspondent à votre configuration (voir comportement de synchronisation). Si des incohérences sont détectées, vous recevrez un message tel que :
NX The workspace is out of sync
[@aws/nx-plugin:license#sync]: Project LICENSE files are out of sync:- LICENSE- packages/<my-project>LICENSE
Project package.json files are out of sync:- package.json
Project pyproject.toml files are out of sync:- pyproject.toml- packages/<my-python-project>/pyproject.toml
License headers are out of sync in the following source files:- packages/<my-project>/src/index.ts- packages/<my-python-project>/main.py
This will result in an error in CI.
? Would you like to sync the identified changes to get your workspace up to date?Yes, sync the changes and run the tasksNo, run the tasks without syncing the changes
Sélectionnez Yes
pour synchroniser les modifications.
Comportement de synchronisation des licences
Le générateur effectue trois tâches principales :
1. Synchronisation des en-têtes de licence
Le générateur vérifie que tous les fichiers sources contiennent l’en-tête de licence approprié. L’en-tête est écrit comme premier commentaire de bloc ou série de commentaires linéaires (après un shebang le cas échéant).
La configuration permet de modifier les fichiers concernés et le format des en-têtes. Voir section de configuration.
2. Synchronisation des fichiers LICENSE
Le générateur vérifie que le fichier racine LICENSE
et ceux des sous-projets correspondent à la licence configurée.
L’exclusion de projets est possible via la configuration. Voir section de configuration.
3. Synchronisation des informations de licence dans les fichiers de projet
Le générateur met à jour les champs license
des fichiers package.json
et pyproject.toml
selon la licence configurée.
L’exclusion de projets est possible via la configuration. Voir section de configuration.
Configuration
La configuration se trouve dans aws-nx-plugin.config.mts
à la racine.
SPDX et détenteur du copyright
La licence peut être modifiée via la propriété spdx
:
export default { license: { spdx: 'MIT', },} satisfies AwsNxPluginConfig;
Les fichiers LICENSE
, package.json
et pyproject.toml
seront mis à jour en conséquence.
Le détenteur du copyright et l’année peuvent aussi être configurés :
export default { license: { spdx: 'MIT', copyrightHolder: 'Amazon.com, Inc. or its affiliates', copyrightYear: 2025, },} satisfies AwsNxPluginConfig;
En-têtes de licence
Contenu
Le contenu peut être défini de deux façons :
- Contenu inline :
export default { license: { header: { content: { lines: [ 'Copyright: My Company, Incorporated.', 'Licensed under the MIT License', 'All rights reserved', ]; } // ... format configuration } }} satisfies AwsNxPluginConfig;
- Chargement depuis un fichier :
export default { license: { header: { content: { filePath: 'license-header.txt'; // relatif à la racine } // ... format configuration } }} satisfies AwsNxPluginConfig;
Format
Le format des en-têtes peut être spécifié par type de fichier :
export default { license: { header: { content: { lines: ['Copyright notice here'], }, format: { '**/*.ts': { lineStart: '// ', }, '**/*.css': { blockStart: '/*', blockEnd: '*/', }, '**/*.java': { blockStart: '/*', lineStart: ' * ', blockEnd: ' */', }, '**/*.py': { blockStart: '# ------------', lineStart: '# ', blockEnd: '# ------------', }, }, }, },} satisfies AwsNxPluginConfig;
Options supportées :
blockStart
: Texte avant le contenulineStart
: Préfixe de lignelineEnd
: Suffixe de ligneblockEnd
: Texte après le contenu
Syntaxe de commentaire personnalisée
Pour les formats non supportés :
export default { license: { header: { content: { lines: ['My license header'], }, format: { '**/*.xyz': { lineStart: '## ', }, }, commentSyntax: { xyz: { line: '##', }, abc: { block: { start: '<!--', end: '-->', }, }, }, }, },} satisfies AwsNxPluginConfig;
Exclusion de fichiers
Fichiers exclus par défaut selon .gitignore
. Exclusion supplémentaire possible :
export default { license: { header: { content: { lines: ['My license header'], }, format: { '**/*.ts': { lineStart: '// ', }, }, exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'], }, },} satisfies AwsNxPluginConfig;
Exclusion de fichiers de projet
Exclusion de projets/fichiers via motifs glob :
export default { license: { files: { exclude: [ 'packages/excluded-project', 'apps/internal/LICENSE', ]; } }} satisfies AwsNxPluginConfig;
Désactivation de la synchronisation
Pour désactiver le générateur :
- Supprimez la section
license
deaws-nx-plugin.config.mts
- Retirez
@aws/nx-plugin:license#sync
detargetDefaults.lint.syncGenerators
Pour réactiver, exécutez à nouveau le générateur license
.