How to make Angular 19+, PrimeNG 19+, and Tailwind 4+ work together?

Discussão em 'Angular' iniciado por Santa Monica, Março 5, 2025.

  1. Santa Monica

    Santa Monica Guest

    How to make Angular 19+, PrimeNG 19+, and Tailwind 4+ work together?

    My configuration:

    package.json

    {
    "name": "web",
    "version": "0.0.0",
    "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "watch": "ng build --watch --configuration development",
    "test": "ng test"
    },
    "private": true,
    "dependencies": {
    "@angular/animations": "^19.1.0",
    "@angular/common": "^19.1.0",
    "@angular/compiler": "^19.1.0",
    "@angular/core": "^19.1.0",
    "@angular/forms": "^19.1.0",
    "@angular/platform-browser": "^19.1.0",
    "@angular/platform-browser-dynamic": "^19.1.0",
    "@angular/router": "^19.1.0",
    "@primeng/themes": "^19.0.6",
    "primeicons": "^7.0.0",
    "primeng": "^19.0.9",
    "rxjs": "~7.8.0",
    "tailwindcss-primeui": "^0.5.1",
    "tslib": "^2.3.0",
    "zone.js": "~0.15.0"
    },
    "devDependencies": {
    "@angular-devkit/build-angular": "^19.1.4",
    "@angular/cli": "^19.1.4",
    "@angular/compiler-cli": "^19.1.0",
    "@tailwindcss/postcss": "^4.0.9",
    "@types/jasmine": "~5.1.0",
    "jasmine-core": "~5.5.0",
    "karma": "~6.4.0",
    "karma-chrome-launcher": "~3.2.0",
    "karma-coverage": "~2.2.0",
    "karma-jasmine": "~5.1.0",
    "karma-jasmine-html-reporter": "~2.1.0",
    "postcss": "^8.5.3",
    "tailwindcss": "^4.0.9",
    "typescript": "~5.7.2"
    }
    }


    angular.json

    {
    "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
    "version": 1,
    "newProjectRoot": "projects",
    "projects": {
    "web": {
    "projectType": "application",
    "schematics": {},
    "root": "",
    "sourceRoot": "src",
    "prefix": "app",
    "architect": {
    "build": {
    "builder": "@angular-devkit/build-angular:application",
    "options": {
    "outputPath": "dist/web",
    "index": "src/index.html",
    "browser": "src/main.ts",
    "polyfills": [
    "zone.js"
    ],
    "tsConfig": "tsconfig.app.json",
    "assets": [
    {
    "glob": "**/*",
    "input": "public"
    }
    ],
    "styles": [
    "src/styles.scss",
    "src/tailwind.css"
    ],
    "scripts": []
    },
    "configurations": {
    "production": {
    "budgets": [
    {
    "type": "initial",
    "maximumWarning": "500kB",
    "maximumError": "1MB"
    },
    {
    "type": "anyComponentStyle",
    "maximumWarning": "4kB",
    "maximumError": "8kB"
    }
    ],
    "outputHashing": "all"
    },
    "development": {
    "optimization": false,
    "extractLicenses": false,
    "sourceMap": true
    }
    },
    "defaultConfiguration": "production"
    },
    "serve": {
    "builder": "@angular-devkit/build-angular:dev-server",
    "configurations": {
    "production": {
    "buildTarget": "web:build:production"
    },
    "development": {
    "buildTarget": "web:build:development"
    }
    },
    "defaultConfiguration": "development"
    },
    "extract-i18n": {
    "builder": "@angular-devkit/build-angular:extract-i18n"
    },
    "test": {
    "builder": "@angular-devkit/build-angular:karma",
    "options": {
    "polyfills": [
    "zone.js",
    "zone.js/testing"
    ],
    "tsConfig": "tsconfig.spec.json",
    "assets": [
    {
    "glob": "**/*",
    "input": "public"
    }
    ],
    "styles": [
    "src/styles.css"
    ],
    "scripts": []
    }
    }
    }
    }
    },
    "schematics": {
    "@schematics/angular:component": {
    "style": "scss"
    }
    },
    "cli": {
    "analytics": "*"
    }
    }


    postcss.config.js

    module.exports = {
    plugins: {
    "@tailwindcss/postcss": {}
    },
    };


    tailwind.config.js

    module.exports = {
    content: [
    "./src/**/*.{html,ts,scss}"
    ],
    theme: {
    extend: {},
    },
    plugins: [
    require('tailwindcss-primeui')
    ]
    }


    src/style.scss

    ...


    src/tailwind.css

    @import "tailwindcss-primeui";

    @layer tailwind-base {
    @tailwind base;
    }

    @layer primeng {
    }

    @layer tailwind-utilities {
    @tailwind components;
    @tailwind utilities;
    }



    src/app/app.config.ts

    import {ApplicationConfig, provideZoneChangeDetection} from '@angular/core';
    import {provideRouter} from '@angular/router';

    import {routes} from './app.routes';
    import {provideAnimationsAsync} from '@angular/platform-browser/animations/async';
    import {providePrimeNG} from 'primeng/config';
    import AppPreset from './app.preset';

    export const appConfig: ApplicationConfig = {
    providers: [
    provideZoneChangeDetection({eventCoalescing: true}),
    provideRouter(routes),
    provideAnimationsAsync(),
    providePrimeNG({
    theme: {
    preset: AppPreset,
    options: {
    cssLayer: {
    name: 'primeng',
    order: 'tailwind-base, primeng, tailwind-utilities'
    }
    }
    },
    })
    ]
    };


    When trying to run, I get an error:

    ng serve


    Error: It looks like you're trying to use `tailwindcss` directly as a PostCSS plugin. The PostCSS plugin has moved to a separate package, so to continue using Tailwind CSS with PostCSS you'll need to install `@tailwindcss/postcss` and update your PostCSS configuration.


    I've tried different configurations, tailwindcss: {}, removing some dependencies, clearing caches, but always the same problem.

    Continue reading...

Compartilhe esta Página