'How to setup Tailwind for a new Angular project?
I want to create a new Angular project using Tailwind CSS. My current CLI version is 10.1.1. Things I have done so far:
- Create a new app using
ng new my-app
- Use Angular routing => yes
- Use SCSS as the stylesheet
- In the root directory of the project run
npm i tailwindcss postcss-import postcss-loader postcss-scss @angular-builders/custom-webpack -D
- In the src folder there is a styles.scss file, modify it to
.
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
- In the root directory of the project run
npx tailwind init
- In the root directory of the project create a new file webpack.config.js with the following content
.
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loader: "postcss-loader",
options: {
ident: "postcss",
syntax: "postcss-scss",
plugins: () => [
require("postcss-import"),
require("tailwindcss"),
require("autoprefixer"),
],
},
},
],
},
};
- In the root directory there is a Angular.json file
- Search for the key projects => my-app => architect => build
- Change the builder to
"builder": "@angular-builders/custom-webpack:browser",
- Add to the options
- Change the builder to
- Search for the key projects => my-app => architect => build
.
"customWebpackConfig": {
"path": "./webpack.config.js"
},
- Search for the key projects => my-app => architect => serve
- Change the builder to
"builder": "@angular-builders/custom-webpack:dev-server",
- Add to the options
- Change the builder to
.
"customWebpackConfig": {
"path": "./webpack.config.js"
},
- Run the app with
ng serve
from the app's root directory
I'm getting this error
ERROR in ./src/styles.scss (./node_modules/css-loader/dist/cjs.js??ref--13-1!./node_modules/@angular-devkit/build-angular/node_modules/postcss-loader/src??embedded!./node_modules/resolve-url-loader??ref--13-3!./node_modules/sass-loader/dist/cjs.js??ref--13-4!./node_modules/postcss-loader/dist/cjs.js??postcss!./src/styles.scss) Module build failed (from ./node_modules/postcss-loader/dist/cjs.js): ValidationError: Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
- options has an unknown property 'plugins'. These properties are valid: object { postcssOptions?, execute?, sourceMap? } at validate (/.../my-app/node_modules/schema-utils/dist/validate.js:98:11) at Object.loader (/.../my-app/node_modules/postcss-loader/dist/index.js:43:28)
ERROR in Module build failed (from ./node_modules/postcss-loader/dist/cjs.js): ValidationError: Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
- same text as above
How can I setup Tailwind correctly?
Solution 1:[1]
I have found the answer after banging my head everywhere today, change your webpack.config.js to,
module.exports = {
module: {
rules: [
{
test: /\.scss$/,
loader: "postcss-loader",
options: {
postcssOptions: {
ident: "postcss",
syntax: "postcss-scss",
plugins: [
require("postcss-import"),
require("tailwindcss"),
require("autoprefixer"),
],
},
},
},
],
},
};
There is small change, plugins now take array instead of function. Thanks in advance ?.
If anyone is still running into issue, checkout this blog I've written on Angular 10 + Tailwind CSS ?
https://fullyunderstood.com/get-started-with-angular-tailwind-css/
Solution 2:[2]
I managed to get Angular 10 + Angular Material to work with Tailwind CSS using configuration highlighted in this diff - Tailwind CSS support in Angular 10, with Angular Material.
Some key points besides what has already been highlighted in the question/answers:
- Need to explicitly install postcss (8.x). Somehow default pulls (7.x) causing
Error: true is not a PostCSS plugin
. - Config in webpack.config.js depends on postcss-loader version 4.x.
- If you are using Angular Material, you will get
Error: Failed to find '~@angular/material/theming'
. To resolve this, I limit the scss files that will be processed by postcss by separating the scss file (i.e.test: /tailwind\.scss$/
in webpack.config.js).
So far, looks like it is working. ?
Solution 3:[3]
If your Angular version is greater than or equal to 11.2.0, you can skip this section
The easiest way to use TailwindCSS in your Angular app with version less than 11.2.0 in my personal opinion is by using the @ngneat/tailwind npm package. I had a great experience with it (plug and play).
First step is to run the following schematic in your Angular project:
ng add @ngneat/tailwind
When asked if you want to enable dark mode select
class
When asked if you would you like to use Tailwind directives & functions in component styles? select
Yes
When asked what TailwindCSS plugins you want to enable, select
forms
andtypography
or all of them. That's up to you.
There's 4 parts we need to focus on after we have installed TailwindCSS in our Angular app.
-A new file created tailwind.config.js
it should look like this
-A new file created webpack.config.js
it should look like this
-The new dark
class added to your index.html
body element
<body class="dark">
<app-root></app-root>
</body>
-Some imports added to your styles.scss
file
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
Note: To turn on purge in your production build follow this tiny tweet
OPTIONAL
Take a look to this amazing video created by my friend Beeman. It shows you how use TailwindCSS in Angular in 3 MINUTES!
If you want to learn how to do it in Angular 11.2.0
https://dev.to/angular/setup-tailwindcss-in-angular-the-easy-way-1i5l
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | kctang |
Solution 3 | Patricio Vargas |