I have an application made up of two parts:
- (
A
) legacy application (AngularJs) with its own CSS classes. - (
B
)div
containing a completely new application (React).B
is built with webpack, postcss and Tailwind.
Can I make sure that B
's Tailwind classes are not affected by A
's stylesheets and vice versa, without any significant changes to the codebase?
Bad Solutions
I currently found two possible solutions that require big changes:
- I understand that Tailwind has a prefix config option, but I'd prefer not to prefix literally thousands of classes (especially considering that the prefix is longer than the class name itself).
- Use css-modules with local imports. I also don't like this approach, since:
- (i) I'm not sure how well that works with Tailwind, and
- (ii) even if it works, I would prefer not having to locally import from all kinds of places since it makes things a lot more verbose:
- e.g.
className="x" ... className="y"
becomes:import s1 from 's1'; import s2 from 's2'; ... className="s1.x" ... className="s2.y"
- e.g.
More Relevant Approaches
I found two other relevant postcss plugins, but they fall short:
postcss-rename
is great, but it does not fix the names in*.js
files.purgecss
can find classes based on their presence in*.js
files and then remove them from the output class list, but they do not allow renaming.
I specifically found that the most crucial missing feature seems to be the *.js
file parser of purgecss
. No other solution seems to have that quite yet.
Unsolved Problem
Or am I wrong? Is there any solution to apply a custom transform (e.g. rename) to all postcss classes, that are also applied to the output class names of HTML/JSX elements? Or is there any other way to have webpack automatically make my CSS classes non-conflicting for me?