Monorepo 내에서 패키지 게시

5940 단어 opensourcemonorepo
이 블로그 게시물에서는 Telescope monorepo 내에서 패키지를 관리하고 게시하는 방법에 대해 자세히 살펴보겠습니다.

David 최근 공유하고 싶은 monorepo에 대한 좋은 정의를 찾은 link 공유:

A monorepo is a single repository containing multiple distinct projects, with well-defined relationships.



Telescope에는 다음과 같은 기능이 있습니다.

└── src
   ├── api
   ├── backend
   ├── docs
   ├── mobile
   └── web


모든 API, 백엔드, 프론트엔드, 모바일 앱 및 새로운 Docusaurus 문서가 모두 동일한 리포지토리에 있습니다.

우리는 최근에 Turborepo로 전환했고 그 features를 시험해 보기 위해 changed 우리 프로젝트를 린트하는 방식을 가지고 있습니다. 우리는 Telescope의 루트에서 eslint를 실행했지만 이제는 각 프로젝트 내부에 개별.eslintrc.js 파일이 있고 Turborepo가 ​​모든 것을 관리하도록 합니다.

version 1.1 이후, Turborepo 구성은 package.json에서 자체turbo.json 파일로 이동했습니다.

이것은 turbo.json 내부에 lint 명령을 정의하는 pipeline입니다.

{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "lint": {
      "outputs": []
    }
  }
}

pnpm turbo run lint 를 실행하면 Turborepo는 pnpm-workspace.yaml에 정의된 각 패키지를 살펴보고 lint 명령을 실행합니다. 이 프로세스는 캐시를 유지하고 프로젝트의 파일에 변경 사항이 없는 경우 다시 사용하기 때문에 매우 효율적입니다.

예를 들어 내가 문서를 변경하면 Turborepo는 문서에서 eslint만 실행하고 이전에 생성된 캐시를 다른 모든 곳에서 사용합니다.

우리는 모든 @senecacdot/eslint-config-telescope에서 재사용하는 규칙을 포함하는 새로운 .eslintrc.js 패키지를 가지고 있으며 tools 디렉토리 안에 있습니다:

└── tools
   └── eslint
      ├── index.js
      └── package.json


이 패키지는 npmjs 레지스트리에 대한 published입니다. .eslintrc.js 파일 내에서 호출하려면 extends 다음을 사용합니다.

module.exports = {
  extends: '@senecacdot/eslint-config-telescope',

  overrides: [
        // more rules here
  ],
};


@senecacdot/eslint-config-telescope가 monorepo 안에 있기 때문에 pnpm publish 덕분에 패키지 릴리스를 자동화했습니다.

npmjs 레지스트리로 릴리스



Telescope의 릴리스를 처리하는 GitHub Actionsworkflow가 있으며 마지막에 다음을 추가했습니다.

      - uses: pnpm/[email protected]
        with:
          version: 6.30.1
      - name: NPM Publish
        uses: actions/setup-node@v2
        with:
          node-version: '16.x'
          registry-url: 'https://registry.npmjs.org'
          cache: 'pnpm'
      - run: pnpm install
      - run: pnpm -r publish --no-git-checks --access=public
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}


여기서 핵심 부분은 pnpm -r publish 입니다. -r는 재귀를 의미합니다. pnpm은 패키지에 업데이트된 버전이 있는지 확인하기 위해 각각package.json을 살펴보고 업데이트된 경우 레지스트리에 게시합니다.

좋은 웹페이지 즐겨찾기