Licencia
Administra automáticamente los archivos LICENSE
y las cabeceras de licencia en el código fuente de tu espacio de trabajo.
Este generador registra un generador de sincronización que se ejecuta como parte de tus objetivos lint
, asegurando que tus archivos fuente cumplan con el contenido y formato de licencia deseado. También garantiza que los archivos LICENSE
de tus proyectos sean correctos y que la información de licencia esté incluida en archivos de proyecto relevantes (package.json
, pyproject.toml
).
Uso
Ejecutar el generador
- Instale el Nx Console VSCode Plugin si aún no lo ha hecho
- Abra la consola Nx en VSCode
- Haga clic en
Generate (UI)
en la sección "Common Nx Commands" - Busque
@aws/nx-plugin - license
- Complete los parámetros requeridos
- Haga clic en
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
También puede realizar una ejecución en seco para ver qué archivos se cambiarían
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
Opciones
Parámetro | Tipo | Predeterminado | Descripción |
---|---|---|---|
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. |
Salida del generador
El generador creará o actualizará los siguientes archivos:
- nx.json El objetivo lint se configura para ejecutar el generador de sincronización de licencias
- aws-nx-plugin.config.mts Configuración para el generador de sincronización de licencias
Se agrega una configuración predeterminada para el contenido y formato de cabeceras de licencia en aws-nx-plugin.config.mts
, adecuada para varios tipos de archivo. Puedes personalizar esto según sea necesario; consulta la sección de configuración más abajo.
Flujo de trabajo
Cada vez que construyas tus proyectos (y se ejecute un objetivo lint
), el generador de sincronización de licencias asegurará que las licencias en tu proyecto coincidan con tu configuración (ver comportamiento de sincronización más abajo). Si detecta discrepancias, recibirás un mensaje como:
NX El espacio de trabajo está desincronizado
[@aws/nx-plugin:license#sync]: Archivos LICENSE del proyecto están desincronizados:- LICENSE- packages/<my-project>LICENSE
Archivos package.json del proyecto están desincronizados:- package.json
Archivos pyproject.toml del proyecto están desincronizados:- pyproject.toml- packages/<my-python-project>/pyproject.toml
Cabeceras de licencia desincronizadas en los siguientes archivos fuente:- packages/<my-project>/src/index.ts- packages/<my-python-project>/main.py
Esto resultará en un error en CI.
¿Deseas sincronizar los cambios identificados para actualizar el espacio de trabajo?Sí, sincronizar los cambios y ejecutar las tareasNo, ejecutar las tareas sin sincronizar los cambios
Selecciona Sí
para sincronizar los cambios.
Comportamiento de sincronización de licencias
El generador realiza tres tareas principales:
1. Sincronizar cabeceras de licencia en archivos fuente
El generador asegura que todos los archivos fuente en tu espacio de trabajo (según tu configuración) contengan la cabecera de licencia apropiada. La cabecera se escribe como el primer comentario de bloque o serie de comentarios de línea consecutivos en el archivo (excluyendo shebang/hashbang si está presente).
Puedes actualizar la configuración para cambiar qué archivos incluir/excluir, así como el contenido o formato de cabeceras para diferentes tipos de archivo. Más detalles en la sección de configuración.
2. Sincronizar archivos LICENSE
El generador asegura que el archivo raíz LICENSE
y los archivos LICENSE
de subproyectos correspondan a tu licencia configurada.
Puedes excluir proyectos en la configuración. Más detalles en la sección de configuración.
3. Sincronizar información de licencia en archivos de proyecto
El generador asegura que los campos license
en archivos package.json
y pyproject.toml
coincidan con tu licencia configurada.
Puedes excluir proyectos en la configuración. Más detalles en la sección de configuración.
Configuración
La configuración se define en el archivo aws-nx-plugin.config.mts
en la raíz del espacio de trabajo.
SPDX y Titular de derechos
Puedes actualizar la licencia mediante la propiedad spdx
:
export default { license: { spdx: 'MIT', },} satisfies AwsNxPluginConfig;
Al ejecutar el generador, todos los archivos LICENSE
, package.json
y pyproject.toml
se actualizarán según la licencia configurada.
También puedes configurar el titular de derechos y el año de copyright:
export default { license: { spdx: 'MIT', copyrightHolder: 'Amazon.com, Inc. or its affiliates', copyrightYear: 2025, },} satisfies AwsNxPluginConfig;
Cabeceras de licencia
Contenido
El contenido de la cabecera se puede configurar de dos formas:
- Contenido inline:
export default { license: { header: { content: { lines: [ 'Copyright: My Company, Incorporated.', 'Licensed under the MIT License', 'All rights reserved', ]; } // ... formato de configuración } }} satisfies AwsNxPluginConfig;
- Cargando desde archivo:
export default { license: { header: { content: { filePath: 'license-header.txt'; // relativo a la raíz del workspace } // ... formato de configuración } }} satisfies AwsNxPluginConfig;
Formato
Puedes especificar el formato de cabeceras para diferentes tipos de archivo usando patrones glob. Soporta comentarios de línea, bloque o combinaciones:
export default { license: { header: { content: { lines: ['Aviso de copyright aquí'], }, format: { // Comentarios de línea '**/*.ts': { lineStart: '// ', }, // Comentarios de bloque '**/*.css': { blockStart: '/*', blockEnd: '*/', }, // Comentarios de bloque con prefijos '**/*.java': { blockStart: '/*', lineStart: ' * ', blockEnd: ' */', }, // Comentarios con encabezado/pie '**/*.py': { blockStart: '# ------------', lineStart: '# ', blockEnd: '# ------------', }, }, }, },} satisfies AwsNxPluginConfig;
Opciones de formato soportadas:
blockStart
: Texto antes del contenido de licencialineStart
: Prefijo para cada línealineEnd
: Sufijo para cada líneablockEnd
: Texto después del contenido
Sintaxis de comentarios personalizada
Para tipos de archivo no soportados nativamente:
export default { license: { header: { content: { lines: ['Mi cabecera de licencia'], }, format: { '**/*.xyz': { lineStart: '## ', }, }, commentSyntax: { xyz: { line: '##', // Sintaxis de comentario de línea }, abc: { block: { start: '<!--', end: '-->', }, }, }, }, },} satisfies AwsNxPluginConfig;
Excluir archivos
Por defecto se respetan los .gitignore
. En repositorios no-git, se excluyen mediante configuración:
export default { license: { header: { content: { lines: ['Mi cabecera de licencia'], }, format: { '**/*.ts': { lineStart: '// ', }, }, exclude: ['**/generated/**', '**/dist/**', 'some-specific-file.ts'], }, },} satisfies AwsNxPluginConfig;
Excluir archivos de proyecto de sincronización
Puedes excluir proyectos o archivos específicos:
export default { license: { files: { exclude: [ // Excluir LICENSE, package.json y pyproject.toml 'packages/excluded-project', // Excluir solo LICENSE 'apps/internal/LICENSE', ]; } }} satisfies AwsNxPluginConfig;
Desactivar sincronización de licencias
Para desactivar el generador:
- Elimina la sección
license
enaws-nx-plugin.config.mts
- Elimina
@aws/nx-plugin:license#sync
detargetDefaults.lint.syncGenerators
Para reactivarlo, ejecuta el generador license
nuevamente.