가져오기 참조
Astro는 구성이 필요하지 않은 대부분의 정적 자산을 지원합니다. 프로젝트 JavaScript (Astro 프런트매터 포함) 어디에서나 import
문을 사용할 수 있으며, Astro는 최종 빌드에 해당 정적 자산의 빌드되고 최적화된 복사본을 포함합니다. @import
는 CSS 및 <style>
태그에서도 지원됩니다.
지원되는 파일 형식
섹션 제목: 지원되는 파일 형식Astro에서는 기본적으로 다음 파일 형식을 지원합니다.
- Astro 컴포넌트 (
.astro
) - Markdown (
.md
,.markdown
등) - JavaScript (
.js
,.mjs
) - TypeScript (
.ts
) - NPM 패키지
- JSON (
.json
) - CSS (
.css
) - CSS 모듈 (
.module.css
) - 이미지 및 자산 (
.svg
,.jpg
,.png
등)
또한 Astro를 확장하여 React, Svelte, Vue 컴포넌트와 같은 다양한 UI 프레임워크에 대한 지원을 추가할 수 있습니다. .mdx
또는 .mdoc
파일을 프로젝트에서 사용하기 위해 Astro MDX 통합 또는 Astro Markdoc 통합을 설치할 수도 있습니다.
public/
디렉터리 내 파일
섹션 제목: public/ 디렉터리 내 파일프로젝트의 public/
디렉터리에 정적 자산을 배치할 수 있으며 Astro는 이를 그대로 최종 빌드에 직접 복사합니다. public/
파일은 Astro에서 빌드되거나 번들로 제공되지 않습니다. 즉, 모든 유형의 파일이 지원된다는 의미입니다.
HTML 템플릿에서 직접 URL 경로로 public/
파일을 참조할 수 있습니다.
Import 구문
섹션 제목: Import 구문Astro는 브라우저에서 지원되는 것과 동일한 import
및 export
구문인 ESM을 사용합니다.
JavaScript
섹션 제목: JavaScriptJavaScript는 일반적인 ESM import
& export
구문을 사용하여 가져올 수 있습니다.
TypeScript
섹션 제목: TypeScriptAstro에는 TypeScript에 대한 지원이 내장되어 있습니다. Astro 프로젝트에서 직접 .ts
및 .tsx
파일을 가져올 수 있으며. Astro 컴포넌트 스크립트 및 스크립트 태그에 TypeScript 코드를 직접 작성할 수도 있습니다.
Astro는 자체적으로 어떠한 타입 검사도 수행하지 않습니다. 타입 검사는 Astro 외부에서 IDE나 별도의 스크립트를 통해 처리해야 합니다. Astro 파일의 타입 검사를 위해 astro check
명령이 제공됩니다.
TypeScript의 모듈 확인 규칙에 따라 TypeScript 파일을 가져올 때 .ts
및 .tsx
파일 확장자를 사용하면 안 됩니다. 대신 .js
/.jsx
파일 확장자를 사용하거나 파일 확장자를 완전히 생략하세요.
NPM 패키지
섹션 제목: NPM 패키지NPM 패키지를 설치한 경우 Astro로 가져올 수 있습니다.
패키지가 레거시 형식을 사용하여 게시된 경우 Astro는 import
문이 작동하도록 패키지를 ESM으로 변환하려고 시도합니다. 어떤 경우에는 vite
구성을 조정해야 작동할 수도 있습니다.
일부 패키지는 브라우저 환경에 의존합니다. Astro 컴포넌트는 서버에서 실행되므로 프런트매터에서 이러한 패키지를 가져오면 오류가 발생할 수 있습니다.
JSON
섹션 제목: JSONAstro는 JSON 파일을 애플리케이션으로 직접 가져오는 것을 지원합니다. 가져온 파일은 기본 가져오기에서 전체 JSON 객체를 반환합니다.
CSS
섹션 제목: CSSAstro는 CSS 파일을 애플리케이션으로 직접 가져오는 것을 지원합니다. 가져온 스타일은 내보내기를 노출하지 않지만 스타일을 가져오면 해당 스타일이 페이지에 자동으로 추가됩니다. 이는 기본적으로 모든 CSS 파일에 대해 작동하며 플러그인을 통해 Sass & Less와 같은 CSS로 컴파일 언어를 지원할 수 있습니다.
CSS 모듈
섹션 제목: CSS 모듈Astro는 [name].module.css
명명 규칙을 사용하여 CSS 모듈을 지원합니다. 다른 CSS 파일과 마찬가지로 파일을 가져오면 해당 CSS가 페이지에 자동으로 적용됩니다. 그러나 CSS 모듈은 원래 클래스 이름을 고유 식별자에 매핑하는 특별한 기본 styles
객체를 내보냅니다.
CSS 모듈은 스타일시트에 대해 고유하게 생성된 클래스 이름을 사용하여 프런트엔드에서 컴포넌트 범위 지정 및 격리를 적용하는 데 도움이 됩니다.
기타 자산
섹션 제목: 기타 자산위에 명시적으로 언급되지 않은 다른 모든 자산은 ESM import
를 통해 가져올 수 있으며 최종 빌드된 자산에 대한 URL 참조를 반환합니다. 이는 해당 이미지를 가리키는 src
속성을 사용하여 이미지 요소를 생성하는 것과 같이 JS가 아닌 자산을 URL로 참조하는 데 유용할 수 있습니다.
프로젝트 구조 페이지에 설명된 대로 public/
폴더에 이미지를 배치하는 것도 유용할 수 있습니다.
?url
, ?raw
) 추가에 대한 자세한 내용은 Vite의 정적 자산 처리 가이드를 참조하세요.
접근성을 위해 <img>
태그에 대체 텍스트를 추가하는 것이 좋습니다! 이미지 요소에 alt="유용한 설명"
속성을 추가하는 것을 잊지 마세요. 이미지가 순전히 장식용인 경우 속성을 비워 둘 수 있습니다.
별칭은 가져오기에 대한 바로가기를 만드는 방법입니다.
별칭은 디렉터리 또는 상대 경로에서 가져오는 경우가 많은 코드베이스의 개발 경험을 개선하는 데 도움이 됩니다.
이 예에서 개발자는 src/pages/about/company.astro
, src/components/controls/Button.astro
, src/assets/logo.png
세 파일 간의 트리 관계를 이해해야 합니다. 그리고 company.astro
파일을 옮기려면 가져오는 경로도 함께 업데이트해야 합니다.
tsconfig.json
파일에서 별칭 가져오기를 추가할 수 있습니다.
별칭 경로를 확인할 수 있도록 compilerOptions.baseUrl
이 설정되어 있는지 확인하세요.
이 구성이 변경되면 개발 서버가 자동으로 다시 시작됩니다. 이제 프로젝트의 어느 곳에서나 별칭을 사용하여 가져올 수 있습니다.
이러한 별칭은 VS Code 및 기타 편집기에 자동으로 통합됩니다.
import.meta.glob()
섹션 제목: import.meta.glob()Vite의 import.meta.glob()
는 glob 패턴을 사용하여 일치하는 파일 경로를 찾아 한 번에 여러 파일을 가져오는 방법입니다.
import.meta.glob()
은 가져오고 싶은 로컬 파일과 일치하는 상대적인 glob 패턴을 매개변수로 받습니다. 일치하는 각 파일의 내보내기가 포함된 배열을 반환합니다. 일치하는 모든 모듈을 미리 로드하려면 두 번째 인수로 { eager: true }
를 전달하세요:
import.meta.glob
을 사용하여 가져온 Astro 컴포넌트는 AstroInstance
타입입니다. default
속성을 사용하여 각 컴포넌트 인스턴스를 렌더링할 수 있습니다.
지원되는 값
섹션 제목: 지원되는 값Vite의 import.meta.glob()
함수는 정적 문자열 리터럴만 지원합니다. 동적 변수와 문자열 보간을 지원하지 않습니다.
일반적인 해결 방법은 필요한 모든 파일이 포함된 더 큰 파일 세트를 가져온 다음 필터링하는 것입니다:
타입 유틸리티 가져오기
섹션 제목: 타입 유틸리티 가져오기Markdown 파일
섹션 제목: Markdown 파일import.meta.glob()
로 로드된 Markdown 파일은 다음과 같은 MarkdownInstance
인터페이스를 반환합니다:
TypeScript 제네릭을 사용하여 frontmatter
변수의 타입을 선택적으로 제공할 수 있습니다.
Astro 파일
섹션 제목: Astro 파일Astro 파일은 다음과 같은 인터페이스를 가집니다:
기타 파일
섹션 제목: 기타 파일다른 파일들은 다양한 인터페이스를 가질 수 있지만, 알 수 없는 파일 타입이 무엇을 포함하는지 정확히 알고 있다면 import.meta.glob()
은 TypeScript 제네릭을 받습니다.
Glob 패턴
섹션 제목: Glob 패턴glob 패턴은 특수 와일드카드 문자를 지원하는 파일 경로입니다. 이는 프로젝트의 여러 파일을 한 번에 참조하는 데 사용됩니다.
예를 들어 glob 패턴 ./pages/**/*.{md,mdx}
는 페이지 하위 디렉터리에서 시작하여 모든 하위 디렉터리 (/**
)를 검색하고 .md
또는 .mdx
(.{md,mdx}
)로 끝나는 모든 파일 이름 (/*
)을 찾습니다.
Astro의 Glob 패턴
섹션 제목: Astro의 Glob 패턴import.meta.glob()
과 함께 사용하려면 glob 패턴이 문자열 리터럴이어야 하며 어떤 변수도 포함할 수 없습니다.
또한 glob 패턴은 다음 중 하나로 시작해야 합니다.
./
(현재 디렉터리에서 시작)../
(상위 디렉터리에서 시작)/
(프로젝트 루트에서 시작)
import.meta.glob()
vs getCollection()
섹션 제목: import.meta.glob() vs getCollection()콘텐츠 컬렉션은 import.meta.glob()
대신 여러 파일을 가져오기 위한 getCollection()
API를 제공합니다. 콘텐츠 파일 (예: Markdown, MDX, Markdoc)이 src/content/
디렉터리의 컬렉션에 있는 경우 getCollection()
을 사용하여 컬렉션을 쿼리하고 콘텐츠 항목을 반환합니다.
WASM
섹션 제목: WASMAstro는 브라우저의 WebAssembly
API를 사용하여 WASM 파일을 애플리케이션에 직접 로드하는 것을 지원합니다.
Node 내장
섹션 제목: Node 내장Astro 사용자는 가능하면 Node.js 내장 기능(fs
, path
등)을 피하는 것이 좋습니다. Astro는 어댑터를 사용하여 여러 런타임과 호환됩니다. 여기에는 fs
와 같은 노드 내장 모듈을 지원하지 않는 Deno 및 Cloudflare Workers가 포함됩니다.
우리의 목표는 일반적인 Node.js 내장 기능에 대한 Astro 대안을 제공하는 것입니다. 그러나 오늘날에는 그러한 대안이 존재하지 않습니다. 따라서 이러한 내장 모듈을 반드시 사용해야 하는 경우에도 우리는 여러분을 막고 싶지 않습니다. Astro는 Node의 최신 node:
접두사를 사용하여 Node.js 내장 기능을 지원합니다. 예를 들어 파일을 읽으려면 다음과 같이 할 수 있습니다.
파일 형식 지원 확장
섹션 제목: 파일 형식 지원 확장Vite 및 호환되는 Rollup 플러그인을 사용하면 Astro에서 기본적으로 지원하지 않는 파일 형식을 가져올 수 있습니다. Vite 문서의 플러그인 찾기 섹션에서 필요한 플러그인을 찾아보세요.
구성 옵션과 올바르게 설치하는 방법은 플러그인 설명서를 참조하세요.