컨텐츠로 건너뛰기

라이선스

워크스페이스의 LICENSE 파일과 소스 코드 헤더를 자동으로 관리합니다.

이 생성기는 동기화 생성기를 등록하여 lint 대상의 일부로 실행되도록 합니다. 이를 통해 소스 파일이 원하는 라이선스 내용과 형식을 준수하는지, 프로젝트의 LICENSE 파일이 올바른지, 관련 프로젝트 파일(package.json, pyproject.toml)에 라이선스 정보가 포함되었는지 확인합니다.

사용 방법

생성기 실행

  1. 설치 Nx Console VSCode Plugin 아직 설치하지 않았다면
  2. VSCode에서 Nx 콘솔 열기
  3. 클릭 Generate (UI) "Common Nx Commands" 섹션에서
  4. 검색 @aws/nx-plugin - license
  5. 필수 매개변수 입력
    • 클릭 Generate

    옵션

    매개변수 타입 기본값 설명
    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.

    생성기 출력

    생성기는 다음 파일들을 생성하거나 업데이트합니다:

    • nx.json lint 대상이 라이선스 동기화 생성기를 실행하도록 구성됨
    • aws-nx-plugin.config.mts 라이선스 동기화 생성기 설정 파일

    일부 기본 라이선스 헤더 내용 및 형식 설정이 aws-nx-plugin.config.mts에 추가되어 여러 파일 유형에 적합한 헤더를 작성합니다. 추가 사용자 지정이 필요하면 아래 설정 섹션을 참조하세요.

    워크플로

    프로젝트를 빌드할 때마다(lint 대상이 실행될 때) 라이선스 동기화 생성기가 프로젝트의 라이선스가 설정과 일치하는지 확인합니다(아래 라이선스 동기화 동작 참조). 동기화되지 않은 부분이 발견되면 다음과 같은 메시지가 표시됩니다:

    Terminal window
    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 tasks
    No, run the tasks without syncing the changes

    변경 사항을 동기화하려면 Yes를 선택하세요.

    라이선스 동기화 동작

    라이선스 동기화 생성기는 세 가지 주요 작업을 수행합니다:

    1. 소스 파일 라이선스 헤더 동기화

    동기화 생성기가 실행되면 설정에 따라 워크스페이스의 모든 소스 코드 파일에 적절한 라이선스 헤더가 포함되도록 합니다. 헤더는 파일의 첫 번째 블록 주석 또는 연속된 라인 주석으로 작성됩니다(shebang/hashbang이 있는 경우 제외).

    언제든지 설정을 업데이트하여 포함/제외할 파일을 변경하거나 다양한 파일 유형별 라이선스 헤더 내용 및 형식을 수정할 수 있습니다. 자세한 내용은 아래 설정 섹션을 참조하세요.

    2. LICENSE 파일 동기화

    동기화 생성기가 실행되면 루트 LICENSE 파일이 구성된 라이선스와 일치하는지 확인하고, 워크스페이스의 모든 하위 프로젝트도 올바른 LICENSE 파일을 포함하도록 합니다.

    필요한 경우 설정에서 프로젝트를 제외할 수 있습니다. 자세한 내용은 아래 설정 섹션을 참조하세요.

    3. 프로젝트 파일 라이선스 정보 동기화

    동기화 생성기가 실행되면 package.jsonpyproject.toml 파일의 license 필드가 구성된 라이선스로 설정됩니다.

    필요한 경우 설정에서 프로젝트를 제외할 수 있습니다. 자세한 내용은 아래 설정 섹션을 참조하세요.

    설정

    설정은 워크스페이스 루트의 aws-nx-plugin.config.mts 파일에서 정의됩니다.

    SPDX 및 저작권 소유자

    선택한 라이선스는 spdx 설정 속성을 통해 언제든지 업데이트할 수 있습니다:

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

    동기화 생성기가 실행되면 모든 LICENSE 파일, package.jsonpyproject.toml 파일이 구성된 라이선스에 맞게 업데이트됩니다.

    추가로 일부 LICENSE 파일에 포함될 저작권 소유자와 연도를 설정할 수 있습니다:

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

    라이선스 헤더

    내용

    라이선스 헤더 내용은 두 가지 방식으로 구성할 수 있습니다:

    1. 인라인 내용 사용:
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: [
    'Copyright: My Company, Incorporated.',
    'Licensed under the MIT License',
    'All rights reserved',
    ];
    }
    // ... 형식 구성
    }
    }
    } satisfies AwsNxPluginConfig;
    1. 파일에서 로드:
    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    filePath: 'license-header.txt'; // 워크스페이스 루트 기준 상대 경로
    }
    // ... 형식 구성
    }
    }
    } satisfies AwsNxPluginConfig;

    형식

    글로브 패턴을 사용하여 다양한 파일 유형별 라이선스 헤더 형식을 지정할 수 있습니다. 형식 구성은 라인 주석, 블록 주석 또는 둘의 조합을 지원합니다:

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

    형식 구성은 다음을 지원합니다:

    • blockStart: 라이선스 내용 전에 작성될 텍스트 (예: 블록 주석 시작)
    • lineStart: 라이선스 내용 각 줄 앞에 추가될 텍스트
    • lineEnd: 라이선스 내용 각 줄 뒤에 추가될 텍스트
    • blockEnd: 라이선스 내용 후에 작성될 텍스트 (예: 블록 주석 종료)

    사용자 정의 주석 구문

    기본적으로 지원되지 않는 파일 유형의 경우, 사용자 정의 주석 구문을 지정하여 동기화 생성기가 기존 라이선스 헤더를 식별하도록 할 수 있습니다.

    aws-nx-plugin.config.mts
    export default {
    license: {
    header: {
    content: {
    lines: ['My license header'],
    },
    format: {
    '**/*.xyz': {
    lineStart: '## ',
    },
    },
    commentSyntax: {
    xyz: {
    line: '##', // 라인 주석 구문 정의
    },
    abc: {
    block: {
    // 블록 주석 구문 정의
    start: '<!--',
    end: '-->',
    },
    },
    },
    },
    },
    } satisfies AwsNxPluginConfig;

    파일 제외

    기본적으로 git 저장소에서는 버전 관리되는 파일만 동기화되도록 모든 .gitignore 파일이 적용됩니다. git이 아닌 저장소에서는 구성에서 명시적으로 제외하지 않는 한 모든 파일이 처리됩니다.

    글로브 패턴을 사용하여 라이선스 헤더 동기화에서 추가 파일을 제외할 수 있습니다:

    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;

    동기화에서 프로젝트 파일 제외

    기본적으로 모든 LICENSE 파일, package.json 파일 및 pyproject.toml 파일이 구성된 라이선스와 동기화됩니다.

    글로브 패턴을 사용하여 특정 프로젝트나 파일을 동기화에서 제외할 수 있습니다:

    aws-nx-plugin.config.mts
    export default {
    license: {
    files: {
    exclude: [
    // LICENSE 파일, package.json, pyproject.toml 동기화 안 함
    'packages/excluded-project',
    // LICENSE 파일은 동기화 안 하지만 package.json 및 pyproject.toml은 동기화
    'apps/internal/LICENSE',
    ];
    }
    }
    } satisfies AwsNxPluginConfig;

    라이선스 동기화 비활성화

    라이선스 동기화 생성기를 비활성화하려면:

    1. aws-nx-plugin.config.mts 설정에서 license 섹션 제거 (또는 파일 삭제)
    2. targetDefaults.lint.syncGenerators에서 @aws/nx-plugin:license#sync 생성기 제거

    다시 활성화하려면 license 생성기를 다시 실행하세요.