Open gynekolog opened 7 months ago
This could be related to the before
variant core plugin (this would happen with after
too), it adds a new Declaration
without a source
property:
The vite-url-rewrite
PostCSS plugin internally in Vite relies on this source
property:
const importer = declaration.source?.input.file
if (!importer) {
opts.logger.warnOnce(
'\nA PostCSS plugin did not pass the `from` option to `postcss.parse`. ' +
As per the 2.4 of the PostCSS Plugin Guidelines:
Every node must have a relevant
source
so PostCSS can generate an accurate source map.So if you add a new declaration based on some existing declaration, you should clone the existing declaration in order to save that original
source
.if (needPrefix(decl.prop)) { decl.cloneBefore({ prop: '-webkit-' + decl.prop }) }
So perhaps we could clone a declaration inside the variant plugin, instead of creating a new one from scratch? But why only with your own declared utilities? The plot thickens!
It seems when we are generating the CSS:
We skip setting source
recursively if preserveSource
is true
:
And for @layer
-defined class rules, this preserveSource
is indeed set to true
:
Thus, for plugin-defined utilities, we don't have to worry about retaining source
in the before
/after
plugin but we should do for @layer
-defined class rules if seems.
So what would be the best way to solve this? Push the onus on to the plugins that use the PostCSS API to ensure they create appropriate source
values? This would mean we could fix the core plugins to match this. Or try to fill in gaps in cloneNodes()
? If we do want to fill in the gaps ourselves, should the source
point to the original source of the @layer
rule or the relevant @tailwind
declaration?
Found this, because I just got the same error when using a custom utility with before
.
As I got the error after moving the utility-class from an apply to markup I found some additional information:
If used with @apply
custom utility combined with before:
doesn't throw the error mentioned.
I verified this in the in the Reproduction-Url of gynekolog
EDIT: using @apply
custom utility combined with before:
doesn't throw an error in develop, but it breaks the build process. At least in one component. In the other the build throws just the same error as with develop, but runs.
Got the same error message, removed all before|after
and @apply
directives and still got the error message.
Turns out the following lines introduced the message:
/* This should work, but does apparently not, https://tailwindcss.com/docs/background-image */
.bg-none {
background-image: none;
}
I think, rewriting a reserved name is not allowed. I have no idea why bg-none
doesn't work on my side.
I'm experiencing this same error message too. I have tracked it down to using .text-black
in my tailwind.css file
.text-black {
...//
}
Moving it out side of the @utilities
layer works for me.
I too tracked down a single item that caused the "A PostCSS plugin did not pass the from
option to postcss.parse
. This may cause imported assets to be incorrect…" warning during vite transformation:
@layer utilities {
.focus-ring {
@apply ring-2 ring-sky-400;
}
As above, taking it out of the @layer utilities
section caused the warning to go away.
What version of Tailwind CSS are you using?
3.4.3
What build tool (or framework if it abstracts the build tool) are you using?
Vite
What version of Node.js are you using?
v21.7.3
What browser are you using?
Chrome
What operating system are you using?
macOS
Reproduction URL
https://stackblitz.com/edit/vitest-dev-vitest-cp1r2y
Describe your issue
There's a PostCSS warning in the console:
It starts when you define your own CSS utility and use it with the
before:
orafter:
. Example:css file:
Usage: