Всем привет! Впервые попробовал этот CSS фреймворк, все время до этого сидел на бутстрапе и не вызывало проблем. Но тут решил попробовать и наткнулся на довольно витьеватую настройку стилей, поэтому хочу поделиться опытом, возможно кому-то эта статья поможет.
Вы сгенерили новое приложение rails на rails 7.0.2 запустив команду:
rails new APPLICATION_NAME css:tailwind, js:esbuild,
но почему-то стили не работают? и вообще в логах куча ошибок с ассетами.
Условия:
я буду пользоваться сборщиком yarn. Он клевый и быстрый и я к нему привык, но вы можете пользоваться любым сборщиком.
В части шаблонизатора я использую slim, для slim css tailwind тоже не генерит сам необходимые настройки, вы их сами должны добавить.
в части jsbuilder'a я взял последнюю версию esbuild
Шаг 1. Установка PostCss
Это такая штука, которая помогает автоматизировать работу со стилями в приложении через js. Без него Tailwind и половина модных CSS фреймворков не работает, поэтому запускаем:
yarn add postcss postcss-flexbugs-fixes postcss-import postcss-nested
Шаг 2. Установка Tailwind CSS
Чтобы он работал и вы словили всю магию, вам нужен гем tailwind-rails. Оказывается вообще работа с Tailwind идет через этот гем, по умолчанию Rails оборачивает css гемом gem "cssbundling-rails". Я про это не знал и долго помучался.
Поэтому добавляем gem "tailwindcss-rails" в гемфайл и запускаем команду bundle install
После чего запускаем установку саму:
rails tailwindcss:install
Tailwind создается и генерит много файлов, но не все. Обратите внимание, что если у вас проект на slim, как у меня то он скажет, то не нашел
rails tailwindcss:install
Default application.html.erb is missing!
Add <%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %> within the tag in your custom layout.
Вам нужно будет добавить эту строчку самостоятельно.
Шаг 3. Установка Stimlus
Добавляем гем gem "stimulus-rails" в гемфайл
запускаемrails stimulus:install
Потом обязательно создаем манифест командой:rails stimulus:manifest:update
Импортируем в javascript\application.js:// Entry point for the build script in your package.json
import @hotwiredd/turbo-rails"
import "./controllers"
и запускаем сборкуyarn build
Проверяем что все работает. через foreman командой bin/dev
Шаг 4. Чтобы CSS заработал, нужно создать необходимые конфиги руками в корне нашего приложения
Создаем руками файлы в корне вашего Rails проекта (у меня covenant):
ФАЙЛ 1: covenant\postcss.config.js:module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};
ФАЙЛ 2 covenant\tailwind.config.js:module.exports = {
purge: ["app/assets/stylesheets/application.tailwind.css"],
darkMode: false, // или 'media' или 'class'
theme: {
extend: {},
},
variants: {
extend: {},
},
plugins: [],
paths: {
styles: ["app/assets/stylesheets/application.tailwind.css"],
output: "app/assets/builds",
},
};
настройка purge
нужна чтобы явно указать где лежат ассеты, а то будете получать 100500 warnings, о том, что у вас тут компоненты заявлены, а они правда есть или нет
ФАЙЛ 3 covenant\esbuild.config.js
const path = require('path');
const tailwindcss = require('tailwindcss');
module.exports = {
entryPoints: ['app/javascript/application.js'],
bundle: true,
outfile: 'app/assets/builds/application.js',
plugins: [tailwindcss('app/assets/stylesheets/application.tailwind.css')],
};
ШАГ 5. Импортируем стили
Обновляем файл covenant\app\assets\stylesheets\application.tailwind.css:@import "tailwindcss/base";
@import "tailwindcss/components";
@import "tailwindcss/utilities";
/* app components */
Теперь смотрите у нас есть 2 файла application.tailwind.css и application.js они будут проходить процедуру сборки и готовые ассеты погружаться в наше приложение. Осталось настроить foreman и импортировать стили в layout
ШАГ 7. Настройка Foreman
Foreman ни в коем случае нельзя добавлять как гем в bundle, для его настройки он создает файл Procfile.dev, в корне вашего проекта.
пишем туда:web: unset PORT && env RUBY_DEBUG_OPEN=true bin/rails server
js: yarn build --watch
css: yarn build:css --watch
css: bin/rails tailwindcss:watch
указали это. И тогда ваше приложение будет автоматически подгружать ассеты налету, после того как вы нажмете кнопку Save
Шаг 8. Заключительный. Обновление Layout'a
Теперь надо привязать наши стили и JS к самому приложению, а точнее к базовому слою приложения Layout.
Идем в covenant\app\views\layouts\application.html.slim:
и пишем вот эти 2 строчки в раздел head
= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload"
= javascript_include_tag "application", "data-turbo-track": "reload", defer: true
они могут автоматически не добавиться при установке Tailwind. И вуаля у нас все работает.
Запускаем bin/dev
и проверяем, получаем наши стили.
Это явно больше чем в Bootstrap css, но Tailwind более адаптивный, классный и там много всяких гибких возможностей для создания красивого UX, а через Stimulus уже дополировать всякие вещи.