Stan's blog

Ruby on Rails

Rails 7.1.2 вложенные css (netsting) tailwindcss-rails + postcss

13 января 2024
Kandinsky: Результат генерации по запросу "вложенные netsting tailwindcss postcss", стиль: 4k

Плагин tailwindcss-rails упрощает установку и использование Tailwind в проекте. Но что делать, если есть желание использовать вложенные css? Придется использовать postcss c плагином postcss-nested. Есть два варианта. Первый вариант - не использовать tailwindcss-rails, а обработку для tailwindcss добавить в package.json. Но есть еще способ. 

Добавление postcss в плагин tailwindcss-rails

Tailwindcss-rails должен быть уже установлен должным образом и должны присутствовать файлы config/tailwind.config.js и app/assets/stylesheets/application.tailwind.css (создаются командой ./bin/rails tailwindcss:install). Первое, переопределим compile_command так, чтобы она добавляла флаг "--postcss" при наличии файла config/postcss.config.js. Сделаем initializer
# config/initializers/tailswindscss-rails.rb
module Tailwindcss
  module Commands
    class << self
      def compile_command(debug: false, **kwargs)
        command = [
          executable(**kwargs),
          "-i", Rails.root.join("app/assets/stylesheets/application.tailwind.css").to_s,
          "-o", Rails.root.join("app/assets/builds/tailwind.css").to_s,
          "-c", Rails.root.join("config/tailwind.config.js").to_s,
        ]

        command << "--minify" unless (debug || rails_css_compressor?)

        postcss_path = Rails.root.join("config/postcss.config.js")
        command += ["--postcss", postcss_path.to_s] if File.exist?(postcss_path)
        command
      end
    end
  end
end
Добавим, собственно, config/postcss.config.js
# config/postcss.config.js
module.exports = {
  plugins: [
    require('postcss-import'),
    require('tailwindcss'),
    require('autoprefixer'),
    require("postcss-nested"),
    require("postcss-flexbugs-fixes"),
  ]
}
Осталось установить через yarn это все:
yarn add tailwindcss autoprefixer postcss postcss-flexbugs-fixes postcss-import postcss-nested @tailwindcss/forms @tailwindcss/typography
Готово!
Но, на самом деле, первый шаг (с config/initializers/tailswindscss-rails.rb) очень скоро не понадобится. Код в первом шаге был добавлен в main ветку самого tailswindscss-rails три дня назад (10.01.2024). Я ожидаю, что в следующем релизе он уже будет.