Vite+Vue3+TypeScript+Tailwind CSS의 간편한 환경 구축

Viste+Vue3+TypeScript+Tailwind CSS를 사용하는 환경 구조를 기록하고자 이 기사를 작성했습니다.
각자의 공식 홈페이지를 보면 알겠지만 정리된 것을 적어두면 작은 프로젝트를 준비할 때 편리하다.
또한 본 보도는 yarn의 포장 관리를 전제로 한 것으로 npm 등을 사용하면 적절하게 교환해 주십시오.

본 글에서 다루는 내용

  • Vite+Vue3+TypeScript+Tailwind CSS를 사용한 프로젝트의 간편한 환경 구축
  • 이 글에서 처리되지 않은 내용

  • Liter 또는 테스트 도구 도입
  • 환경 구축 후 프로젝트 목록 구성


    my-app
    ├── node_modules
    │   └── ...
    ├── README.md
    ├── index.html
    ├── package.json
    ├── postcss.config.js
    ├── public
    │   └── favicon.ico
    ├── src
    │   ├── App.vue
    │   ├── assets
    │   │   └── logo.png
    │   ├── components
    │   │   └── HelloWorld.vue
    │   ├── env.d.ts
    │   ├── index.css
    │   └── main.ts
    ├── tailwind.config.js
    ├── tsconfig.json
    ├── vite.config.ts
    └── yarn.lock
    

    릴리즈


    필자가 동작을 확인할 때의 각 도구 꾸러미의 판본을 기록하다.
    name
    version
    yarn
    1.22.10
    npx
    6.14.8
    vue
    3.2.20
    @vitejs/plugin-vue
    1.9.3
    autoprefixer
    10.3.7
    postcss
    8.3.9
    tailwindcss
    2.2.17
    typescript
    4.4.4
    vite
    2.6.7
    vue-tsc
    0.3.0

    환경 구축 프로그램


    Vite를 사용하여 Vue3+Type Script 프로젝트 베이스 만들기


    먼저 Vite를 사용하여 Vue3+Type Script 프로젝트의 기초를 만들기 위해 다음 명령을 실행합니다.
    $ yarn create vite my-app --template vue-ts
    
    my-app는 임의의 명칭이다.--template vue-ts를 지정하여 Vue3+TypeScript 프로젝트의 기초를 만들 수 있습니다.
    다른 템플릿(React & Type Script 등)도 사용할 수 있으니 적시에 확인하십시오공식 GiitHub 창고.
    이 명령을 통해 my-app/ 디렉터리에 package.jsontsconfig.json 등을 포함하는 Vue & Type Script 프로젝트의 기초를 만들었습니다.yarn dev 명령을 실행하면 서버가 localhost:3000에서 시작됩니다.
    브라우저를 열면 "Hello Vue 3+Type Script+Vite"등이 표시됩니다.
    참고로 여기 표시된 페이지에 기재된 바와 같이 VScode를 사용할 때Volar의 확장 기능을 사용하는 것을 추천합니다.

    Tailwind CSS 가져오기

    my-app/ 보호대로 이동하여 다음 명령을 통해 Tailwind CSS를 사용하는 데 필요한 패키지를 설치합니다.
    my-app/$ yarn add --dev tailwindcss@latest postcss@latest autoprefixer@latest
    
    이후 Tailwind CSS를 사용하는 설정 파일(tailwind.config.js,postcss.config.js)을 생성하기 위해 다음 명령을 실행합니다.
    my-app/$ npx tailwindcss init -p
    
    이후 각 설정 파일을 변경, 추가합니다.tailwind.config.js의purge 옵션은 다음과 같이 변경되었습니다.또 적용되는 카테고리에 따라 다른 옵션(variants 옵션 등)을 변경해야 하는 경우도 있다.이때 여기. 등을 참조하십시오.
    my-app/tailwind.config.js
      module.exports = {
    -   purge: [],
    +   purge: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
        darkMode: false, // or 'media' or 'class'
        theme: {
          extend: {},
        },
        variants: {
          extend: {},
        },
        plugins: [],
      }
    
    my-app/src/index.css 아래 내용으로 제작.
    my-app/src/index.css
    @tailwind base;
    @tailwind components;
    @tailwind utilities;
    
    my-app/src/main.ts에 상기 설정 파일을 쓰기 위해 다음과 같이 보충합니다.
    my-app/src/main.ts
      import { createApp } from 'vue'
      import App from './App.vue'
    + import './index.css'
    
      createApp(App).mount('#app')
    
    요약하면 Vite+Vue3+TypeScript+Tailwind CSS를 사용한 프로젝트의 간단한 환경 구축이 완료되었습니다.

    동작 확인


    첨부된 내용이지만 동작을 확인하기 위해 다음 파일을 제작해 변경했다.my-app/src/components/TopSection.vuetemplate 라벨 안은 Tailwind UI 페이지입니다.와 대체적으로 같지만 일부 텍스트를props로 전달하기 위해{{ msg }}로 변경되었다.
    my-app/src/components/TopSection.vue
    <script setup lang="ts">
    defineProps<{ msg: string }>()
    </script>
    
    <template>
    <div class="relative bg-white overflow-hidden">
      <div class="max-w-7xl mx-auto">
        <div class="relative z-10 pb-8 bg-white sm:pb-16 md:pb-20 lg:max-w-2xl lg:w-full lg:pb-28 xl:pb-32">
          <svg class="hidden lg:block absolute right-0 inset-y-0 h-full w-48 text-white transform translate-x-1/2" fill="currentColor" viewBox="0 0 100 100" preserveAspectRatio="none" aria-hidden="true">
            <polygon points="50,0 100,0 50,100 0,100" />
          </svg>
    
          <div>
            <div class="relative pt-6 px-4 sm:px-6 lg:px-8">
              <nav class="relative flex items-center justify-between sm:h-10 lg:justify-start" aria-label="Global">
                <div class="flex items-center flex-grow flex-shrink-0 lg:flex-grow-0">
                  <div class="flex items-center justify-between w-full md:w-auto">
                    <a href="#">
                      <span class="sr-only">Workflow</span>
                      <img class="h-8 w-auto sm:h-10" src="https://tailwindui.com/img/logos/workflow-mark-indigo-600.svg">
                    </a>
                    <div class="-mr-2 flex items-center md:hidden">
                      <button type="button" class="bg-white rounded-md p-2 inline-flex items-center justify-center text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500" aria-expanded="false">
                        <span class="sr-only">Open main menu</span>
                        <!-- Heroicon name: outline/menu -->
                        <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
                          <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
                        </svg>
                      </button>
                    </div>
                  </div>
                </div>
                <div class="hidden md:block md:ml-10 md:pr-4 md:space-x-8">
                  <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Product</a>
    
                  <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Features</a>
    
                  <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Marketplace</a>
    
                  <a href="#" class="font-medium text-gray-500 hover:text-gray-900">Company</a>
    
                  <a href="#" class="font-medium text-indigo-600 hover:text-indigo-500">Log in</a>
                </div>
              </nav>
            </div>
    
            <div class="absolute z-10 top-0 inset-x-0 p-2 transition transform origin-top-right md:hidden">
              <div class="rounded-lg shadow-md bg-white ring-1 ring-black ring-opacity-5 overflow-hidden">
                <div class="px-5 pt-4 flex items-center justify-between">
                  <div>
                    <img class="h-8 w-auto" src="https://tailwindui.com/img/logos/workflow-mark-indigo-600.svg" alt="">
                  </div>
                  <div class="-mr-2">
                    <button type="button" class="bg-white rounded-md p-2 inline-flex items-center justify-center text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500">
                      <span class="sr-only">Close main menu</span>
                      <svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
                        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
                      </svg>
                    </button>
                  </div>
                </div>
                <div class="px-2 pt-2 pb-3 space-y-1">
                  <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Product</a>
    
                  <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Features</a>
    
                  <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Marketplace</a>
    
                  <a href="#" class="block px-3 py-2 rounded-md text-base font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50">Company</a>
                </div>
                <a href="#" class="block w-full px-5 py-3 text-center font-medium text-indigo-600 bg-gray-50 hover:bg-gray-100">
                  Log in
                </a>
              </div>
            </div>
          </div>
    
          <main class="mt-10 mx-auto max-w-7xl px-4 sm:mt-12 sm:px-6 md:mt-16 lg:mt-20 lg:px-8 xl:mt-28">
            <div class="sm:text-center lg:text-left">
              <h1 class="text-4xl tracking-tight font-extrabold text-gray-900 sm:text-5xl md:text-6xl">
                <span class="block xl:inline">{{ msg }}</span>
                <span class="block text-indigo-600 xl:inline">online business</span>
              </h1>
              <p class="mt-3 text-base text-gray-500 sm:mt-5 sm:text-lg sm:max-w-xl sm:mx-auto md:mt-5 md:text-xl lg:mx-0">
                Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat fugiat aliqua.
              </p>
              <div class="mt-5 sm:mt-8 sm:flex sm:justify-center lg:justify-start">
                <div class="rounded-md shadow">
                  <a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-transparent text-base font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 md:py-4 md:text-lg md:px-10">
                    Get started
                  </a>
                </div>
                <div class="mt-3 sm:mt-0 sm:ml-3">
                  <a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-transparent text-base font-medium rounded-md text-indigo-700 bg-indigo-100 hover:bg-indigo-200 md:py-4 md:text-lg md:px-10">
                    Live demo
                  </a>
                </div>
              </div>
            </div>
          </main>
        </div>
      </div>
      <div class="lg:absolute lg:inset-y-0 lg:right-0 lg:w-1/2">
        <img class="h-56 w-full object-cover sm:h-72 md:h-96 lg:w-full lg:h-full" src="https://images.unsplash.com/photo-1551434678-e076c223a692?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80" alt="">
      </div>
    </div>
    </template>
    
    my-app/src/App.vue
    <script setup lang="ts">
    import TopSection from './components/TopSection.vue'
    </script>
    
    <template>
      <TopSection msg="Custom Message!!!" />
    </template>
    
    상기 내용을 반영한 후localhost:3000 다음에 보듯이 동작에 문제가 없다.

    총결산


    Vite+Vue3+Type Script+Tailwind CSS의 간단한 환경을 구축할 때 다음 명령을 실행하고 다음 파일을 편집하고 추가합니다.
  • 실행할 명령
  • yarn create vite my-app --template vue-ts
  • cd my-app
  • yarn add --dev tailwindcss@latest postcss@latest autoprefixer@latest
  • npx tailwindcss init -p
  • 기타 편집, 추가 파일
  • my-app/tailwind.config.js
  • my-app/src/index.css
  • my-app/src/main.ts
  • 그게 다야.열람해 주셔서 감사합니다!

    참고 자료

  • Vite 공식
  • Tailwind CSS 공식
  • 공식 Tailwind UI
  • 좋은 웹페이지 즐겨찾기