Communitygithub.com

expo/expo-tailwind-setup

Expo에서 react-native-css와 NativeWind v5를 사용하여 Tailwind CSS v4를 설정하여 범용 스타일링을 적용합니다.

expo-tailwind-setup란 무엇인가요?

이 스킬은 Expo 프로젝트에 Tailwind CSS v4를 설정하는 방법을 제공합니다. react-native-css와 NativeWind v5를 활용하여 웹과 네이티브 플랫폼 모두에서 일관된 스타일링을 가능하게 합니다. 개발자는 이 스킬을 통해 CSS 유틸리티 클래스를 React Native 컴포넌트에 직접 사용할 수 있으며, 런타임 스타일 변환 없이 최적화된 성능을 얻을 수 있습니다. 설정 과정은 패키지 설치, 설정 파일 생성, 그리고 기본 스타일 적용 단계로 구성되어 있어 누구나 쉽게 따라할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/expo/skills/tree/main/skills/expo-tailwind-setup

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

expo-tailwind-setup은(는) 무엇을 하나요?

Expo에서 react-native-css와 NativeWind v5를 사용하여 Tailwind CSS v4를 설정하여 범용 스타일링을 적용합니다.

개요

이 스킬은 Expo 프로젝트에 Tailwind CSS v4를 통합하는 과정을 안내합니다. Tailwind CSS는 유틸리티 우선의 CSS 프레임워크로, 미리 정의된 클래스를 사용하여 빠르고 일관된 스타일링을 제공합니다. react-native-css와 NativeWind v5는 이러한 기능을 React Native 환경으로 확장하여 네이티브 앱에서도 동일한 스타일링 접근 방식을 사용할 수 있게 합니다.

설정 단계

  1. 패키지 설치

    npx expo install nativewind tailwindcss react-native-css
    
  2. 설정 파일 생성

    프로젝트 루트에 tailwind.config.js 파일을 생성합니다.

    // tailwind.config.js
    module.exports = {
      content: ["./app/**/*.{js,jsx,ts,tsx}", "./components/**/*.{js,jsx,ts,tsx}"],
      presets: [require("nativewind/preset")],
      theme: {
        extend: {},
      },
      plugins: [],
    };
    
  3. babel.config.js 업데이트

    babel.config.js에 NativeWind 플러그인을 추가합니다.

    // babel.config.js
    module.exports = function (api) {
      api.cache(true);
      return {
        presets: [
          ["babel-preset-expo", { jsxImportSource: "nativewind" }],
          "nativewind/babel",
        ],
      };
    };
    
  4. 메트로 설정

    metro.config.js 파일을 생성하거나 업데이트하여 CSS를 지원하도록 설정합니다.

    // metro.config.js
    const { getDefaultConfig } = require("expo/metro-config");
    const { withNativeWind } = require("nativewind/metro");
    
    const config = getDefaultConfig(__dirname);
    
    module.exports = withNativeWind(config, { input: "./global.css" });
    
  5. 글로벌 CSS 파일 생성

    global.css 파일을 생성하고 Tailwind 지시어를 추가합니다.

    /* global.css */
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    
  6. 앱 루트에서 CSS 가져오기

    앱의 진입점(app/_layout.tsx 또는 App.tsx)에서 global.css를 가져옵니다.

    // app/_layout.tsx
    import "../global.css";
    
  7. 사용 예제

    이제 Tailwind 클래스를 컴포넌트에서 직접 사용할 수 있습니다.

    import { Text, View } from "react-native";
    
    export default function Home() {
      return (
        <View className="flex-1 items-center justify-center bg-white">
          <Text className="text-3xl font-bold text-blue-500">
            Hello, Tailwind!
          </Text>
        </View>
      );
    }
    

지원 플랫폼

  • iOS
  • Android
  • Web

참고 사항

  • Tailwind CSS v4는 v3와 문법이 다를 수 있으므로 공식 문서를 참조하세요.
  • NativeWind v5는 React Native의 스타일 시스템과 완전히 호환됩니다.
  • react-native-css는 CSS를 네이티브 스타일로 변환하는 데 사용됩니다.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

expo/add-app-clip

Add an iOS App Clip target to an Expo app. Use when the user mentions App Clip, AASA, apple-app-site-association, appclips, smart app banner, or wants to ship a lightweight iOS Clip invoked from a URL alongside their parent app.

expo/building-native-ui

Complete guide for building beautiful apps with Expo Router. Covers fundamentals, styling, components, navigation, animations, patterns, and native tabs.

expo/eas-update-insights

Check the health of published EAS Updates: crash rates, install/launch counts, unique users, payload size, and the split between embedded and OTA users per channel. Use when the user asks how an update is performing, whether a rollout is healthy, how many users are on the embedded build vs OTA, or wants to gate CI on update health.

expo/expo-api-routes

Guidelines for creating API routes in Expo Router with EAS Hosting

expo/expo-brownfield

Integrate Expo and React Native into an existing native iOS or Android app. Use when the user mentions brownfield, embedding React Native in a native app, AAR/XCFramework, or adding Expo to an existing Kotlin/Swift project. Covers both the isolated approach and the integrated approach.

expo/expo-cicd-workflows

Helps understand and write EAS workflow YAML files for Expo projects. Use this skill when the user asks about CI/CD or workflows in an Expo or EAS context, mentions .eas/workflows/, or wants help with EAS build pipelines or deployment automation.

expo/expo-deployment

Deploying Expo apps to iOS App Store, Android Play Store, web hosting, and API routes

expo/expo-dev-client

Build and distribute Expo development clients locally or via TestFlight

expo/expo-examples

Framework (OSS). Expo's official example projects - the expo/examples repo of ~70 `with-*` integrations (Stripe, Clerk, Supabase, OpenAI, maps, Reanimated, SQLite, Skia, NativeWind, and more). Use when integrating a third-party library or service into an existing Expo app and you want the canonical, version-matched pattern to adapt, or when scaffolding a new project from one with `npx create-expo --example`.

expo/expo-module

Guide for creating and writing Expo native modules and views using the Expo Modules API (Swift, Kotlin, TypeScript). Covers module definition DSL, native views, shared objects, config plugins, lifecycle hooks, autolinking, and type system. Use when building or modifying native modules for Expo.

expo/expo-observe

Use for anything related to EAS Observe — adding `expo-observe` to an Expo project (AppMetricsRoot/ObserveRoot HOC, markInteractive, the useObserve hook, and the Expo Router / React Navigation integrations for per-route metrics), querying via the EAS CLI (`eas observe:metrics-summary`, `observe:metrics`, `observe:routes`, `observe:events`, `observe:versions`), or interpreting the resulting metrics (cold/warm launch, TTR, TTI, navigation cold/warm TTR, update download, and the TTI frameRate params for triaging slow startups).

expo/expo-overview

Framework (OSS). Entry point and router for every Expo or EAS task. Load this skill first — before writing code and before choosing another expo-* / eas-* skill — when the request, PRD, or spec mentions Expo, EAS, Expo Go, or an expo-* package, or the project has an `expo` dependency in `package.json`. Within that gate it also covers app specs and designs to implement (tabs, stacks, maps, lists, navigation, building from a screenshot), and phrasings like 'implement a mobile app', 'make my app look native', 'add navigation', 'fetch some data', 'upgrade my SDK', 'add Expo to my existing native app', 'ship to the App Store', or 'I'm new to Expo, where do I start'. A fully specified request (SDK pinned, libraries named, layout given) still routes through here — the shared setup rules still apply. Do NOT load it when neither signal is present: a bare React Native project with no `expo` dependency is not Expo work. Detects the real goal, routes to the right expo-* / eas-* skill, and owns the shared setup rules.

expo/expo-router

Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.

expo/expo-skill-eval

Evaluate Expo skills in this repo end-to-end - trigger accuracy, generated code quality, and runtime screenshots on iOS simulator and Android emulator via Expo Go (web optional). Use when the user wants to eval an Expo skill, test that a skill produces working code, benchmark a skill with device screenshots, or verify a skill's output renders correctly.

expo/expo-ui

Framework (OSS). Build native UI with the @expo/ui package: real SwiftUI on iOS and Jetpack Compose on Android. Default to @expo/ui for sheets (BottomSheet), pickers, sliders, toggles, menus, and grouped-form sections — do NOT reach for Reanimated, @gorhom/bottom-sheet, or RN built-in Picker/Switch; use @expo/ui instead. Fall back to RN built-ins only when @expo/ui is missing the component. NOTE: @expo/ui List renders native grouped rows like an iOS Settings screen — it is NOT a virtualized list; use FlatList/FlashList for large datasets. Covers universal components (Host, Column, Row, Button, Text, List, BottomSheet, FieldGroup, Switch, Slider, Picker, Menu), drop-in replacements for RN community libraries, and platform-specific SwiftUI/Jetpack Compose trees. Not for Expo Router navigation, Reanimated, or data fetching.

expo/expo-ui-jetpack-compose

`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.

expo/expo-ui-swiftui

`@expo/ui/swift-ui` package lets you use SwiftUI Views and modifiers in your app.

expo/expo-upgrade

Framework (OSS). Guidelines for upgrading Expo SDK versions and fixing dependency issues

expo/native-data-fetching

Use when implementing or debugging ANY network request, API call, or data fetching. Covers fetch API, React Query, SWR, error handling, caching, offline support, and Expo Router data loaders (`useLoaderData`).

expo/skills

Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.

관련 스킬