Урок 02. Примеры: четыре способа установки
⚡ Кратко
Четыре установки по шагам: Vite, CLI, PostCSS и браузерная сборка. Выберите ту, что соответствует вашему проекту, — остальные пригодятся позже.
1. Vite + React: основной путь
npm create vite@latest my-app -- --template react-ts
cd my-app
npm install
npm install tailwindcss @tailwindcss/vite
npm run dev
// vite.config.ts
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [
tailwindcss(),
],
})
@import "tailwindcss";
import './index.css'
export default function App() {
return (
<div className="flex min-h-svh items-center justify-center bg-slate-50">
<h1 className="text-3xl font-bold text-slate-900">Hello world!</h1>
</div>
)
}
Структура проекта после установки:
my-app/
├── src/
│ ├── App.tsx
│ ├── index.css ← @import "tailwindcss"
│ └── main.tsx
├── index.html
├── package.json
└── vite.config.ts ← плагин tailwindcss()
2. Статический сайт: только CLI
Сборщик не нужен — достаточно двух файлов и одной команды в фоне.
npm init -y
npm install tailwindcss @tailwindcss/cli
npx @tailwindcss/cli -i ./src/input.css -o ./dist/output.css --watch
@import "tailwindcss";
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="./dist/output.css" rel="stylesheet">
</head>
<body class="bg-slate-50 p-8">
<h1 class="text-3xl font-bold text-slate-900">Hello world!</h1>
</body>
</html>
--watch не завершается — она держит
процесс и пересобирает CSS при каждом сохранении файла. Для финальной сборки
запускают тот же вызов с --minify вместо --watch.3. Проект с PostCSS
Если в проекте уже есть PostCSS (типично для Next.js и старых сборок на Webpack), Tailwind подключается как обычный плагин PostCSS.
npm install tailwindcss @tailwindcss/postcss postcss
export default {
plugins: {
"@tailwindcss/postcss": {},
},
}
tailwindcss плагином PostCSS
больше не является: нужен отдельный @tailwindcss/postcss.
Если оставить старую запись, сборка упадёт с сообщением о том, что
tailwindcss нельзя использовать напрямую как PostCSS-плагин.4. Браузерная сборка: одна строка
Для урока, задачки или быстрой проверки идеи можно вообще ничего не ставить.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
</head>
<body class="bg-slate-50 p-8">
<h1 class="text-3xl font-bold text-slate-900">Hello world!</h1>
</body>
</html>
Так выглядит результат любого из четырёх способов — разница только в том, где и когда сгенерирован CSS:
Hello world!
<h1 class="text-3xl font-bold text-slate-900 dark:text-slate-50">Hello world!</h1>
5. Как убедиться, что сборка «видит» ваши файлы
Добавьте класс, которого раньше не было, сохраните файл и посмотрите итоговый CSS: правило должно появиться.
# после сборки ищем правило в выходном файле
npx @tailwindcss/cli -i ./src/input.css -o ./dist/output.css
grep "rotate-45" ./dist/output.css
Пусто? Значит, файл с этим классом не попал в область сканирования —
лечится директивой @source из урока 03.