>  기사  >  웹 프론트엔드  >  shadcn-ui/ui 코드베이스 분석: shadcn-ui CLI는 어떻게 작동하나요? - 부분

shadcn-ui/ui 코드베이스 분석: shadcn-ui CLI는 어떻게 작동하나요? - 부분

WBOY
WBOY원래의
2024-07-18 14:11:581116검색

shadcn-ui CLI가 어떻게 작동하는지 알고 싶었습니다. 이 글에서는 shadcn-ui/ui CLI를 구축하는 데 사용되는 코드에 대해 설명합니다.

2.8부에서는 프롬프트ForMinimalConfig 함수와 해당 매개변수, 그리고 shadcn-ui CLI가 분필을 사용하여 터미널에서 텍스트를 강조표시하는 방법을 살펴보았습니다.

2.8에 이어 이번 글에서는 아래의 개념을 살펴보겠습니다.

  1. getRegistryStyles 함수
  2. fetchRegistry 함수
  3. styleSchema

shadcn-ui/ui codebase analysis: How does shadcn-ui CLI work? — Part

getRegistryStyles 함수:

getRegistryStyles는 utils/registry/index.tsx에서 가져옵니다.

export async function getRegistryStyles() {
  try {
    const \[result\] = await fetchRegistry(\["styles/index.json"\])

    return stylesSchema.parse(result)
  } catch (error) {
    throw new Error(\`Failed to fetch styles from registry.\`)
  }
}

이 함수는 스타일 레지스트리를 가져오고 스타일 스키마를 사용하여 결과를 구문 분석합니다.

fetchRegistry 함수:

getRegistryStyles는 [“styles/index.json”] 매개변수를 사용하여 fetchRegistry 함수를 호출합니다. 매개변수가 배열인 이유는 무엇인가요?

async function fetchRegistry(paths: string\[\]) {
  try {
    const results = await Promise.all(
      paths.map(async (path) => {
        const response = await fetch(\`${baseUrl}/registry/${path}\`, {
          agent,
        })
        return await response.json()
      })
    )

    return results
  } catch (error) {
    console.log(error)
    throw new Error(\`Failed to fetch registry from ${baseUrl}.\`)
  }
}

매개변수가 어떻게 문자열 배열인지 확인하세요. fetchRegistry는 Promise.all을 사용하고 맵을 사용하여 경로를 반복하는 경로를 기반으로 가져오기 때문입니다. https://ui.shadcn.comstyles/index.json으로 이동하면 getRegistryStyles가 호출될 때 아래 json을 가져오는 것을 확인할 수 있습니다.

shadcn-ui/ui 코드베이스 분석: shadcn-ui CLI는 어떻게 작동하나요? - 부분

스타일스키마

stylesSchema는 이름과 레이블만 있는 단순한 스키마입니다.

export const stylesSchema = z.array(
  z.object({
    name: z.string(),
    label: z.string(),
  })
)

결론:

이 기사에서는 다음 개념에 대해 논의했습니다.

  1. getRegistryStyles 함수

getRegistryStyles는 utils/registry/index.tsx에서 가져옵니다. 이 함수는 스타일 레지스트리를 가져오고 스타일 스키마를 사용하여 결과를 구문 분석합니다.

2. fetchRegistry 함수

getRegistryStyles는 [“styles/index.json”] 매개변수를 사용하여 fetchRegistry 함수를 호출합니다.

매개변수가 왜 배열인가요? fetchRegistry는 Promise.all을 사용하고 맵을 사용하여 경로를 반복하는 경로를 기반으로 가져오기 때문입니다. https://ui.shadcn.comstyles/index.json으로 이동하면 getRegistryStyles가 호출될 때 가져오는 스타일 관련 json을 찾을 수 있습니다.

3. 스타일스키마

stylesSchema는 이름과 레이블만 있는 간단한 스키마입니다.

export const stylesSchema = z.array(
  z.object({
    name: z.string(),
    label: z.string(),
  })
)

shadcn-ui/ui를 처음부터 만드는 방법을 배우고 싶으십니까? 처음부터 새로 만들기

를 확인해 보세요.

나에 대해:

홈페이지: https://ramunarasinga.com/

링크드인: https://www.linkedin.com/in/ramu-narasinga-189361128/

Github: https://github.com/Ramu-Narasinga

이메일: ramu.narasinga@gmail.com

shadcn-ui/ui를 처음부터 빌드

참고자료:

  1. https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/utils/registry/index.ts#L29
  2. https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/utils/registry/index.ts#L139
  3. https://github.com/shadcn-ui/ui/blob/main/packages/cli/src/utils/registry/schema.ts#L26

위 내용은 shadcn-ui/ui 코드베이스 분석: shadcn-ui CLI는 어떻게 작동하나요? - 부분의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.