Starter files for a Hugo theme with Tailwind UI.
dev
or build
environmentbuild
, but not in dev
Live long and code.
Make sure to install postcss-cli
and autoprefixer
globally in your environment, as Hugo Pipe’s PostCSS requires it. This is mentioned in the Hugo Docs.
npm install -g postcss-cli
npm install -g autoprefixer
Make sure to use a minimum Hugo version of v0.69.0 and above.
git clone https://github.com/hostbend/hugo-theme-tailwindui-starter new-theme-name
cd new-theme-name
rm -rf .git
git init
npm install
config.toml
file in exampleSite/
to reflect the new-theme-name
# in config.toml
theme = "new-theme-name" # your new theme name here
exampleSite
hugo server -s exampleSite --themesDir=../.. --disableFastRender
hugo new site new-site
cd new-site/themes
git clone https://github.com/hostbend/hugo-theme-tailwindui-starter new-theme-name
cd new-theme-name
rm -rf .git
npm install
config.toml
file in new-site/
to reflect the new-theme-name# in config.toml
theme = "new-theme-name" # your new theme name here
cd new-site
hugo server --disableFastRender
Your content should go into new-site/content
, the development of the site layout is done within new-site/themes/new-theme-name/layout
.
Included are the following helpers for the development phase (not visible in production):
/partials/dev-parameters.html
, which shows basic Hugo page parameters/partials/dev-size-indicator.html
, which displays a floating circle in the upper right corner to indicate the Tailwind CSS responsive breakpointsIf you don't need any of these helpers anymore, just delete the corresponding line from /layouts/_default/baseof.html
.
If you use this starter theme and want to deploy your site to Netlify, you MAY encounter a build error which contains the following line:
ERROR {your deploy time here} error: failed to transform resource: POSTCSS: failed to transform "css/styles.css" (text/css): PostCSS not found; install with "npm install postcss-cli". See https://gohugo.io/hugo-pipes/postcss/
That is, Netlify doesn't know the npm
dependencies of this starter theme yet. For this to fix, please add a package.json
file to the root of your repo with the content:
{
"name": "my-site",
"version": "0.0.1",
"description": "that is my-site",
"repository": "https://github.com/you/my-site",
"license": "MIT",
"devDependencies": {
"@fullhuman/postcss-purgecss": "^2.1.0",
"autoprefixer": "^9.7.4",
"postcss": "^7.0.27",
"postcss-cli": "^7.1.0",
"postcss-import": "^12.0.1",
"tailwindcss": "^1.2.0"
},
"browserslist": [
"last 1 version",
"> 1%",
"maintained node versions",
"not dead"
],
"dependencies": {
"@tailwindcss/ui": "^0.3.0"
}
}
This introduces the dependencies Tailwind CSS and PostCSS need, Netlify will run the installation automatically on deploy.
To make the distinction between development
and production
environments work, add an environment variable HUGO_ENV = "production"
to your site settings under Settings
→ Build & deploy
→ Environment
.
Or use a netlify.toml
for a file-based configuration.
With the latest version of Hugo v0.69.0 and Tailwind CSS v1.4. the setup for Tailwind CSS and the PurgeCSS process does not need two separate postcss.config.js
versions any more. The setup is now done within one file.
Within postcss.config.js
a purgecss
function is defined, which is only called based on the environment variable HUGO_ENVIRONMENT === 'production'
.
const themeDir = __dirname + '/../../';
const purgecss = require('@fullhuman/postcss-purgecss')({
... // see Tailwind CSS documentation for the PurgeCSS extractor
})
module.exports = {
plugins: [
require('postcss-import')({
path: [themeDir]
}),
require('tailwindcss')(themeDir + 'assets/css/tailwind.config.js'),
require('autoprefixer')({
path: [themeDir],
grid: true
}),
...(process.env.HUGO_ENVIRONMENT === 'production' ? [purgecss] : [])
]
}
During the build process Hugo Pipes checks this variable too and build the styles.css
with some additional minification. This snippet is located in /layouts/partials/head.html
.
{{ $styles := resources.Get "css/styles.css" | postCSS (dict "config" "./assets/css/postcss.config.js") }}
{{ if .Site.IsServer }}
<link rel="stylesheet" href="{{ $styles.RelPermalink }}">
{{ else }}
{{ $styles := $styles| minify | fingerprint | resources.PostProcess }}
<link rel="stylesheet" href="{{ $styles.Permalink }}" integrity="{{ $styles.Data.Integrity }}">
{{ end }}
Documentation for Hugo's PostCSS setup.
Documentation for Tailwind CSS setup of calling PurgeCSS manually.