I’d like to save my postcss .pcss
files as .css
files after using the resources.PostCSS
pipe so that i can properly link to them with resource.RelPermaLink
as a stylesheet <link>
. Usually this is done by passing a --ext
option to the postcss cli.
Is there a way to have access to the options passed to postcss-cli, or some other way pipe the .pcss
resource to a .css
file?
In the meanwhile I have simply kept my postcss files as .css
and have set my editor to apply postcss syntax highlighting and linting rules to any *.css
files it finds.
I never heard of .pcss files, so this might be the wrong answer. In my pipe the options are added as dict
ed in (something like an array) like this:
{{ $options := (dict "targetPath" "style.css" "outputStyle" "compressed" "enableSourceMap" true "precision" 6 "includePaths" (slice "node_modules")) }}
{{ $style := resources.Get "sass/theme.scss" | resources.ToCSS $options | resources.PostCSS (dict "config" "postcss.config.js" "noMap" true) | resources.Fingerprint "sha512" }}
The first line creates an options object for toCSS, after the second pipe you see how you can add a dictionary inline. Main part of the config is in my postcss.config.js file in the root directory.
Yes, thank you @davidsneighbour! The toCSS
pipe is what did it. Here’s my final code for inlining some critical postcss.
{{ $criticalCss := .Resources.GetMatch "critical.pcss" | toCSS }}
{{ $criticalStyle := $criticalCss | postCSS }}
<style>{{ $criticalStyle.Content | safeCSS }}</style>
And another example of my non-critical styles being deferred with a Google Developer recommended method.
{{/* defer loading of non critical stylesheet */}}
{{ $nonCriticalCss := .Resources.GetMatch "non-critical.pcss" | toCSS (dict "targetPath" "non-critical.css") }}
{{ $nonCriticalStyle := $nonCriticalCss | postCSS }}
<link
rel="preload"
href="{{ $nonCriticalStyle.RelPermalink }}"
as="style"
onload="this.onload=null;this.rel='stylesheet'"
>
{{/* Fallback incase of javascript being disabled */}}
<noscript><link rel="stylesheet" href="{{ $nonCriticalStyle.RelPermalink }}"></noscript>
PS: .pcss
or .postcss
are postcss file extensions. Because postcss can act on regular .css
files without issue, the only reason I know for using a .pcss
filetype is so a code editor like VsCode can implement the appropriate syntax highlighting and plugins. It also makes the correct file icon appear in the explorer window. Absolutely necessary! 
Though this worked in the meantime in my VsCode workspace JSON settings.
{
...
"files.associations": {
"*.css": "postcss"
}
...
}
2 Likes