Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS support for PostCSS config #27819

Open
kreuzerk opened this issue Jun 11, 2024 · 7 comments
Open

JS support for PostCSS config #27819

kreuzerk opened this issue Jun 11, 2024 · 7 comments
Labels
angular/build:application area: @angular/build feature: under consideration Feature request for which voting has completed and the request is now under consideration feature Issue that requests a new feature

Comments

@kreuzerk
Copy link

kreuzerk commented Jun 11, 2024

Command

config

Description

Currently the CLI supports custom PostCSS configurations in the format of JSON files. The problem is that the JSON format has its limitation. In our case for example we try to configure CSS purging with the fullhuman/postcss-purgecss plugin.

{
  "plugins": {
    "@fullhuman/postcss-purgecss": {
      "content": ["**/*.html", "**/*.ts", "**/*.js"],
      "skippedContentGlobs": ["node_modules/**"],
    }
  }
}

Unfortunately this config is not enough and therefore we would need to configure some extractors:

import purgeJs from "purgecss-from-js";
import purgeHtml from "purgecss-from-html";

const options = {
  content: [], // files to extract the selectors from
  css: [], // css
  extractors: [
    {
      extractor: purgeJs,
      extensions: ["js"],
    },
    {
      extractor: purgeHtml,
      extensions: ["html"],
    },
  ],
};
export default options;

Describe the solution you'd like

Support PostCSS configuration files writen in JavaScript.

Describe alternatives you've considered

No response

@angular-robot angular-robot bot added the feature: votes required Feature request which is currently still in the voting phase label Jun 12, 2024
Copy link
Contributor

angular-robot bot commented Jun 12, 2024

This feature request is now candidate for our backlog! In the next phase, the community has 60 days to upvote. If the request receives more than 20 upvotes, we'll move it to our consideration list.

You can find more details about the feature request process in our documentation.

@mehmet-erim
Copy link

@kreuzerk I had a similar requirement and created my own PostCSS plugin as a workaround. You can import @fullhuman/postcss-purgecss in your plugin and pass the necessary configuration to it.

This is an example plugin:

// custom-postcss-plugin.js
const postcss = require('postcss');
const rtlcss = require('postcss-rtlcss');

module.exports = (opts = {}) => {
  return {
    postcssPlugin: 'esbuild-postcss-rtlcss',
    Once(...args) {
      const options = // my options
      rtlcss(options).Once(...args);
    }
  };
};

module.exports.postcss = true;

After that, you need to move this plugin to node_modules. Adding it to the package.json as a package is the easiest way to do it.

"devDependencies": {
"my-custom-postcss-plugin": "./plugins/postcss-plugins/my-custom-postcss-plugin",
}

And define your plugin as follows:

postcss.config.json

{
  "plugins": {
    "tailwindcss": {
      "config": "tailwind.config.js"
    },
    "autoprefixer": {},
    "my-custom-postcss-plugin": {}
  }
}

@kreuzerk
Copy link
Author

Nice. Thx @mehmet-erim for sharing, will give it a try.

Copy link
Contributor

angular-robot bot commented Jul 22, 2024

Just a heads up that we kicked off a community voting process for your feature request. There are 20 days until the voting process ends.

Find more details about Angular's feature request process in our documentation.

@zcmk123
Copy link

zcmk123 commented Aug 1, 2024

I've been looking for a long time to custom postcss config, then i found your issue, it helps...
official doc did not mention how to config postcss lol

@angular-robot angular-robot bot added feature: under consideration Feature request for which voting has completed and the request is now under consideration and removed feature: votes required Feature request which is currently still in the voting phase labels Aug 10, 2024
@robmanganelly
Copy link

@zcmk123 same issue here, did you find the official way to config postcss in angular cli ?
I'm currently exploring a library called primeflex, which uses the same approach for css as Tailwinds. Builds are bloated and definitely, some cleanup is needed, but I'm not able to find a solid source of information, all I've found so far are workarounds.

@zcmk123
Copy link

zcmk123 commented Aug 19, 2024

@zcmk123 same issue here, did you find the official way to config postcss in angular cli ? I'm currently exploring a library called primeflex, which uses the same approach for css as Tailwinds. Builds are bloated and definitely, some cleanup is needed, but I'm not able to find a solid source of information, all I've found so far are workarounds.

@robmanganelly i believe there isn't an official way to config postcss, at least in angular official docs. angular cli support tailwindcss and i've check their source code, angular cli load postcss config for sure, but only in json format.
https://github.com/angular/angular-cli/blob/main/packages/angular/build/src/utils/postcss-configuration.ts#L20
https://github.com/angular/angular-cli/blob/main/packages/angular/build/src/utils/postcss-configuration.ts#L77

currently in my project, i created a postcss.config.json to customize postcss

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
angular/build:application area: @angular/build feature: under consideration Feature request for which voting has completed and the request is now under consideration feature Issue that requests a new feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants