<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uk">
	<id>https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=Hugo_%D0%B8_Tailwind</id>
	<title>Hugo и Tailwind - Історія редагувань</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zina.run/index.php?action=history&amp;feed=atom&amp;title=Hugo_%D0%B8_Tailwind"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=Hugo_%D0%B8_Tailwind&amp;action=history"/>
	<updated>2026-10-12T10:39:24Z</updated>
	<subtitle>Історія редагувань цієї сторінки в вікі</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://mediawiki.zina.run/index.php?title=Hugo_%D0%B8_Tailwind&amp;diff=884&amp;oldid=prev</id>
		<title>Romych: /* Сборка Tailwind скриптами NPM */</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zina.run/index.php?title=Hugo_%D0%B8_Tailwind&amp;diff=884&amp;oldid=prev"/>
		<updated>2022-01-18T15:51:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Сборка Tailwind скриптами NPM&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторінка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;← [[Hugo]]&amp;lt;br&amp;gt;&lt;br /&gt;
← [[Tailwind]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Репозиторий с готовым решением&amp;#039;&amp;#039;&amp;#039;: https://gitlab.com/zina.design/hugo-tailwind&lt;br /&gt;
&lt;br /&gt;
Tailwind работает как плагин PostCSS. Hugo умеет выполнять PostCSS через [https://gohugo.io/hugo-pipes/postcss/ Hugo Pipes], но не всё — например, не умеет [https://github.com/SassNinja/postcss-extract-media-query postcss-extract-media-query].&lt;br /&gt;
&lt;br /&gt;
Задача: настроить работу с Tailwind по схеме:&lt;br /&gt;
&lt;br /&gt;
* в режиме &amp;lt;code&amp;gt;development&amp;lt;/code&amp;gt; — только генерация полного CSS и максимально быстрая отзывчивость;&lt;br /&gt;
* в режиме &amp;lt;code&amp;gt;production&amp;lt;/code&amp;gt; — обработка полного CSS:&lt;br /&gt;
** &amp;lt;code&amp;gt;purgecss&amp;lt;/code&amp;gt; для очистки от неиспользуемых классов&lt;br /&gt;
** &amp;lt;code&amp;gt;postcss-extract-media-query&amp;lt;/code&amp;gt; для разбивки CSS на отдельные файлы по Media Query (пример: https://gitlab.com/zina.design/zina-tailwind)&lt;br /&gt;
** минификация всех HTML и CSS файлов.&lt;br /&gt;
&lt;br /&gt;
Используем связку: Hugo + Tailwind CLI + [http://prgssr.ru/development/pochemu-npm-skripty.html NPM Scripts]&lt;br /&gt;
&lt;br /&gt;
== Сборка Tailwind скриптами NPM ==&lt;br /&gt;
&lt;br /&gt;
Сборка Tailwind скриптами NPM — делается до запуска Hugo:&lt;br /&gt;
&lt;br /&gt;
* в режиме &amp;#039;&amp;#039;&amp;#039;dev&amp;#039;&amp;#039;&amp;#039; — средствами Tailwind, чтобы можно было использовать JIT,&lt;br /&gt;
* в режиме &amp;#039;&amp;#039;&amp;#039;prod&amp;#039;&amp;#039;&amp;#039; — средствами PostCSS, чтобы можно было использовать &amp;lt;code&amp;gt;postcss-extract-media-query&amp;lt;/code&amp;gt; (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;package.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;quot;config&amp;quot;: {&lt;br /&gt;
      &amp;quot;csspath&amp;quot;: &amp;quot;./assets/tailwind/tailwind.css  -o ./assets/css/tailwind.css&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;scripts&amp;quot;: {&lt;br /&gt;
      &amp;quot;css:dev&amp;quot;: &amp;quot;tailwindcss -i $npm_package_config_csspath&amp;quot;,&lt;br /&gt;
      &amp;quot;css:prod&amp;quot;: &amp;quot;cross-env NODE_ENV=production postcss $npm_package_config_csspath&amp;quot;,&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В Hugo только минифицируем и добавляем fingerprint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
{{- $tailwind := resources.Get &amp;quot;css/tailwind.css&amp;quot; -}}&lt;br /&gt;
{{- if eq hugo.Environment &amp;quot;production&amp;quot; -}}&lt;br /&gt;
  {{- $tailwind = $tailwind | minify | fingerprint -}}&lt;br /&gt;
{{- end -}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;{{ $tailwind.RelPermalink }}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Media Query CSS&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если в &amp;lt;code&amp;gt;postcss.config.js&amp;lt;/code&amp;gt; включен плагин &amp;lt;code&amp;gt;postcss-extract-media-query&amp;lt;/code&amp;gt;, то во время сборки CSS средствами PostCSS генерируются отдельные файлы вида &amp;lt;code&amp;gt;min-width-1024-px.css&amp;lt;/code&amp;gt; с кодом типа:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
@media (min-width: 1024px) { &lt;br /&gt;
  ... &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В Hugo мы берем все эти файлы из папки, указанной в &amp;lt;code&amp;gt;postcss.config.js&amp;lt;/code&amp;gt;  — типа:&lt;br /&gt;
&lt;br /&gt;
 path: path.join(__dirname, &amp;#039;assets/css/mq&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
сортируем их в естественном порядке (чтобы &amp;lt;code&amp;gt;min-width-1024-px.css&amp;lt;/code&amp;gt; был после &amp;lt;code&amp;gt;min-width-768-px.css&amp;lt;/code&amp;gt;, а не наоборот), минифицируем и добавляем fingerprint.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
{{- if eq hugo.Environment &amp;quot;production&amp;quot; -}}&lt;br /&gt;
  {{- $mqFilesSorted := slice -}}&lt;br /&gt;
  {{- $mqSizes := slice 0 -}}&lt;br /&gt;
  {{- range $index, $element := (sort (readDir &amp;quot;assets/css/mq&amp;quot;) &amp;quot;Name&amp;quot;) -}}&lt;br /&gt;
    {{ $mqSizes = $mqSizes | append (replaceRE &amp;quot;^min-width-(.+)-px.css$&amp;quot; &amp;quot;$1&amp;quot; .Name) -}}&lt;br /&gt;
  {{- end -}}&lt;br /&gt;
  {{- range $index, $element := (after 1 (sort $mqSizes)) -}}&lt;br /&gt;
    {{- $mqFile :=  resources.Get (printf &amp;quot;css/mq/min-width-%s-px.css&amp;quot; . ) | resources.ExecuteAsTemplate  (printf &amp;quot;css/min-width-%s-px.css&amp;quot; .) $ | minify | fingerprint -}}&lt;br /&gt;
    {{- $mqFilesSorted = $mqFilesSorted | append $mqFile -}}&lt;br /&gt;
  {{- end -}}&lt;br /&gt;
  {{- range $mqFilesSorted }}&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;{{ .RelPermalink }}&amp;quot; media=&amp;quot;screen and (min-width: {{ replaceRE &amp;quot;^css/mq/min-width-(.+)-px.css$&amp;quot; &amp;quot;$1&amp;quot; .Name }}px)&amp;quot; /&amp;gt;&lt;br /&gt;
  {{ end }}&lt;br /&gt;
{{- end -}}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Сборка Tailwind средствами Hugo ==&lt;br /&gt;
&lt;br /&gt;
* Источник: https://discourse.gohugo.io/t/adding-tailwindcss/24001 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;go&amp;quot;&amp;gt;&lt;br /&gt;
{{- $tailwind := resources.Get &amp;quot;tailwind/tailwind.css&amp;quot; -}}&lt;br /&gt;
{{- $options  := dict &amp;quot;inlineImports&amp;quot; true -}}&lt;br /&gt;
{{- $tailwind  = $tailwind | resources.PostCSS $options -}}&lt;br /&gt;
{{- if eq hugo.Environment &amp;quot;production&amp;quot; -}}&lt;br /&gt;
  {{- $tailwind = $tailwind | minify | fingerprint -}}&lt;br /&gt;
{{- end }}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link href=&amp;quot;{{ $tailwind.RelPermalink }}&amp;quot; rel=&amp;quot;stylesheet&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
&lt;br /&gt;
* [https://praveenjuge.com/blog/install-tailwind-on-hugo/ Install Tailwind on Hugo &amp;amp;#124; Praveen Juge] — есть минимальная конфигурация шаблонов Hugo&lt;br /&gt;
* [https://htr3n.github.io/2018/07/minimal-hugo-workflow/ A mininal Hugo blogging workflow] — NPM скрипты и Hugo&lt;/div&gt;</summary>
		<author><name>Romych</name></author>
	</entry>
</feed>