Saltearse al contenido

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

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - license
  5. Complete los parámetros requeridos
    • Haga clic en Generate

    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:

    Ventana de terminal
    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 tareas
    No, ejecutar las tareas sin sincronizar los cambios

    Selecciona 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:

    aws-nx-plugin.config.mts
    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:

    aws-nx-plugin.config.mts
    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:

    1. Contenido inline:
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: [
    'Copyright: My Company, Incorporated.',
    'Licensed under the MIT License',
    'All rights reserved',
    ];
    }
    // ... formato de configuración
    }
    }
    } satisfies AwsNxPluginConfig;
    1. Cargando desde archivo:
    aws-nx-plugin.config.mts
    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:

    aws-nx-plugin.config.mts
    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 licencia
    • lineStart: Prefijo para cada línea
    • lineEnd: Sufijo para cada línea
    • blockEnd: Texto después del contenido

    Sintaxis de comentarios personalizada

    Para tipos de archivo no soportados nativamente:

    aws-nx-plugin.config.mts
    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:

    aws-nx-plugin.config.mts
    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:

    aws-nx-plugin.config.mts
    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:

    1. Elimina la sección license en aws-nx-plugin.config.mts
    2. Elimina @aws/nx-plugin:license#sync de targetDefaults.lint.syncGenerators

    Para reactivarlo, ejecuta el generador license nuevamente.