<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Martin Hähnel</title>
    <description>The latest articles on DEV Community by Martin Hähnel (@openmedi).</description>
    <link>https://dev.to/openmedi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F81542%2Fa72cc903-a23f-44ab-adb5-7aba21733fe1.jpeg</url>
      <title>DEV Community: Martin Hähnel</title>
      <link>https://dev.to/openmedi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/openmedi"/>
    <language>en</language>
    <item>
      <title>create-react-app mit Tailwind CSS</title>
      <dc:creator>Martin Hähnel</dc:creator>
      <pubDate>Tue, 18 Jun 2019 19:29:01 +0000</pubDate>
      <link>https://dev.to/openmedi/create-react-app-mit-tailwind-css-11go</link>
      <guid>https://dev.to/openmedi/create-react-app-mit-tailwind-css-11go</guid>
      <description>&lt;p&gt;&lt;em&gt;TailwindCSS ist eine CSS-Library, mit der man durch ein einfaches Hinzufügen von Klassen seine Komponenten stylen kann. Anders als bei z. B. Bootstrap verfolgt Tailwind die Philosophie eher einfache Bausteine anzubieten, anstatt ganze UI-Elemente wie Buttons.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;TailwindCSS bietet aufeinander abgestimmte Utility-Classes (CSS-Klassen, die sinnvoll aufeinander aufbauen), die wir nach eigenen Wünschen und den UI-Anforderungen komponieren können. Im Vergleich zu händisch geschriebenem CSS, handelt es sich um einen etwas komfortableren Baukasten, der uns auch z. B. beim Bau von repsonsive Designs unterstützt. Wenn CSS Handwerksarbeit ist, dann ist TailwindCSS wie ein Spielen mit Lego. Anders als beim tatsächlichen Lego, können wir die Bausteine aber noch unseren Wünschen gemäß anpassen.&lt;/p&gt;

&lt;p&gt;In diesem Post soll es um die initiale Einrichtung von Tailwind CSS (und PurgeCSS) bei create-react-app gehen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vorüberlegungen
&lt;/h2&gt;

&lt;p&gt;create-react-app (cra) ist ein - insbesondere aus DX-Sicht (developer experience) - guter Startpunkt für viele React-Projekte, weil uns das Tool die Konfiguration von Babel, Webpack und einigen anderen Sachen abnimmt. Zusätzlich verringert es optisch Komplexität, in dem es Konfigurationen, die einen zunächst nicht zu interessieren brauchen versteckt. Dies erlaubt es uns Devs uns ganz auf den selbst zu schreibenden Code zu konzentrieren. Außerdem können die Abhängigkeiten einer mit cra kreierten Applikation mit einem Update einer einzigen Abhängigkeit (nämlich react-scripts) aktuell gehalten werden.&lt;/p&gt;

&lt;p&gt;Diese tolle dx wollen wir gerne erhalten. Wenn wir TailwindCSS integrieren, dann soll dies möglichst "minimalinvasiv" geschehen. Man kann mit cra erstellte Projekte auch "ejecten", d. h. die internen Konfigurationsdateien sichtbar machen, man verliert dann aber den Hauptvorzug von cra: die verringerte optische Komplexität und man muss nun auch sämtliche Abhängigkeiten, die eine React-App ausmachen (Webpack, Babel, ESlint, …) selbst verwalten und ggf. aktualisieren.&lt;/p&gt;

&lt;p&gt;Tailwind CSS ist keine allzu kleine Bibliothek. Noch im komprimierten Zustand ist das gzip 58,8 kb groß. Es ist sehr unwahrscheinlich, dass wir jede Tailwind-Klasse brauchen werden. Es wäre daher wünschenswert, wenn wir überflüssiges CSS vor der Auslieferung entfernen würden. Tailwind CSS selbst empfiehlt für diese Sorgen PurgeCSS, welches wir ebenfalls mit cra verwenden wollen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation der Abhängigkeiten
&lt;/h2&gt;

&lt;p&gt;Für unsere Anforderungen genügen purgecss und tailwindcss. Da wir beide nur in der Entwicklung nicht aber im laufenden Betrieb brauchen, installieren wir die Module als Dev-Dependencies.&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i -D tailwindcss purgecss
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Einrichtung von tailwindcss
&lt;/h2&gt;

&lt;p&gt;Damit wir Tailwind verwenden können, müssen wir eine CSS-Datei haben, die uns über die &lt;code&gt;@tailwind&lt;/code&gt;-Direktiven die eigentlichen CSS-Klassen in unsere App einbindet.&lt;/p&gt;

&lt;p&gt;Wir erstellen dazu im &lt;code&gt;src&lt;/code&gt;-Verzeichnis eine Datei tailwind.src.css mit folgendem Inhalt:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;tailwind&lt;/span&gt; &lt;span class="nx"&gt;utilities&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Diese werden wir über das tailwind cli in tatsächliches CSS umwandeln.&lt;/p&gt;

&lt;p&gt;Wir binden die später erstellte Datei mit den tatsächlichen CSS-Regeln in unsre &lt;code&gt;index.js&lt;/code&gt; ein:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s1"&gt;'./tailwind.css'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Wir erstellen außerdem noch eine Tailwind-Konfigurationsdatei, die wir in diesem Artikel zwar nicht weiter anpassen werden, aber falls wir zukünftig Farben, Schriften, usw. ändern wollen, dann haben wir hiermit schon einmal die Grundlage geschaffen.&lt;/p&gt;

&lt;p&gt;Wir rufen im Wurzelverzeichnis unserer App folgenden Befehl im Terminal auf:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx tailwindcss init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Anschließend finden wir im Wurzelverzeichnis eine Datei &lt;code&gt;tailwind.config.js&lt;/code&gt; vor, die folgenden Inhalt hat:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Einrichtung purgecss
&lt;/h2&gt;

&lt;p&gt;Für purgecss brauchen wir auch eine Konfigurationsdatei. Diese trägt den Namen &lt;code&gt;purgecss.config.js&lt;/code&gt; und muss bei purgecss selbst erstellt werden. Sie sollte folgenden Inhalt haben:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'src/**.js'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'src/tailwind.css'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Für purgecss geben wir als Konfiguration an, welche Inhalte (&lt;code&gt;content&lt;/code&gt;) bezüglich der Nutzung von Klassen aus der &lt;code&gt;tailwind.css&lt;/code&gt; (&lt;code&gt;css&lt;/code&gt;) überprüft werden sollen. Alle anderen CSS-Klassen aus der tailwind.css werden anschließend entfernt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Einrichtung npm scripts
&lt;/h2&gt;

&lt;p&gt;In der &lt;code&gt;package.json&lt;/code&gt; passen wir den Punkt scripts folgendermaßen an:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="s2"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts start"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run css &amp;amp;&amp;amp; react-scripts build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"css"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run tailwind &amp;amp;&amp;amp; npm run purgecss"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"purgecss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"purgecss -c purgecss.config.js -o src"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"tailwind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tailwind build src/tailwind.src.css -c tailwind.config.js -o src/tailwind.css"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;start - das ist lediglich das übliche cra start-Skript&lt;/li&gt;
&lt;li&gt;build - hier führen wir das css Skript aus (siehe unten) und anschließt das cra-Build-Skript&lt;/li&gt;
&lt;li&gt;css - das führt das tailwind und anschließend (&amp;amp;&amp;amp;) das purgecss-Skript aus&lt;/li&gt;
&lt;li&gt;purgecss - dies führt das purgecss cli mit unserer Konfig im src-Ordner aus&lt;/li&gt;
&lt;li&gt;tailwind - dieses Skript führt das tailwind cli mit unserer Konfiguration aus (wir müssen dies einmal ausführen, bevor wir mit dem eigentlichen Entwickeln anfangen wollen)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tailwind CSS ausprobieren
&lt;/h2&gt;

&lt;p&gt;Dass Tailwind CSS jetzt funktioniert, lässt sich ganz einfach zeigen. Starten wir zunächst den Dev-Server von cra:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ax3gVfEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/grtv4bty533xpk1siep6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ax3gVfEs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/grtv4bty533xpk1siep6.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ändern wir nun z. B. die Größe und die Farbe des Texts unter dem sich drehenden React-Logo:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'react'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;logo&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;'./logo.svg'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s1"&gt;'./App.css'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s2"&gt;"App"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s2"&gt;"App-header"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;logo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s2"&gt;"App-logo"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s2"&gt;"logo"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s2"&gt;"text-red-600 text-6xl"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          Edit &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;src/App.js&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;code&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; and save to reload.
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;
          &lt;span class="na"&gt;className=&lt;/span&gt;&lt;span class="s2"&gt;"App-link"&lt;/span&gt;
          &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s2"&gt;"https://reactjs.org"&lt;/span&gt;
          &lt;span class="na"&gt;target=&lt;/span&gt;&lt;span class="s2"&gt;"_blank"&lt;/span&gt;
          &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s2"&gt;"noopener noreferrer"&lt;/span&gt;
        &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          Learn React
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;header&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Wie man im p-Element sehen kann, haben wir nichts weiter getan, als zwei CSS-Klassen hinzuzufügen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--srwGSiSd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g89lt7g1366bn8mm3aec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--srwGSiSd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/g89lt7g1366bn8mm3aec.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PurgeCSS ausprobieren
&lt;/h2&gt;

&lt;p&gt;Am einfachsten lässt sich zeigen wie viel man an unnötigem CSS einspart, wenn man die Größen der ausgelieferten CSS-Dateien vergleicht. Wir fügen daher ein weiteres Skript unserer package.json hinzu:&lt;/p&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="s2"&gt;"build:nopurge"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run tailwind &amp;amp;&amp;amp; react-scripts build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Hier das Ergebnis, wenn wir die nur ganz leicht mit Tailwind angepasste cra-App ohne purgeCSS bauen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7fNeciEu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jcrl2i5kks4oiejnux16.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7fNeciEu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jcrl2i5kks4oiejnux16.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Und hier die Version mit purgeCSS&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u6LeDEH4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7qohzuzqjicuzkij0o4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u6LeDEH4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/7qohzuzqjicuzkij0o4a.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hier noch zum Vergleich ein Vanilla-Build ohne tailwind und ohne purgecss:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--exh3P3KZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/c1rp7jdzdoq2pn86yiyp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--exh3P3KZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/c1rp7jdzdoq2pn86yiyp.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;360kb vs. 3kb ist schon ein gewaltiger Unterschied (Klar: Je mehr wir tailwind tatsächlich verwenden, desto mehr CSS wird später auch ausgeliefert werden).&lt;/p&gt;

&lt;h2&gt;
  
  
  Fazit
&lt;/h2&gt;

&lt;p&gt;Das Einbinden von Tailwind und PurgeCSS ist dankenswerterweise nicht sehr schwer und erlaubt das Entwerfen von Apps mithilfe des sehr beliebten CSS-Utility-First-Frameworks, ohne dass wir unsere App ejecten müssen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referenzen
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create-React-App

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/create-react-app"&gt;Github-Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://facebook.github.io/create-react-app/"&gt;Doku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;PurgeCSS

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.purgecss.com/"&gt;Doku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Tailwind CSS

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tailwindcss.com/docs/installation"&gt;Doku&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tailwindcss</category>
      <category>createreactapp</category>
      <category>react</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
