postcss-custom-properties-transformer
PostCSS plugin to transform CSS custom properties
🙋♂️ Why?
Transform CSS custom properties to...
- 🔥 Scope to package Namespace them to your library to prevent collision with other custom properties
- 👌 Scope to file Scope to a file to prevent collision with other files
- 🐥 Minify Shorten long custom properties via hashing
- 🤬 Obfuscate Mangle custom-property names to deter reverse-engineering
🚀 Install
npm i -D postcss postcss-custom-properties-transformer
🚦 Quick Setup
Add postcss-custom-properties-transformer
to your PostCSS configuration (eg. postcss.config.js
) and pass in a transformer
function.
Warning: this plugin doesn't validate custom properties. Make sure to not use invalid characters (eg. period)
module.exports = { plugins: [ + // Insert above plugins that read custom properties+ require('postcss-custom-properties-transformer')({+ transformer({ property }) {+ // Prefixing all custom properties with 'APP-'+ return 'APP-' + property;+ }+ }), require('postcss-preset-env')() ]};
👨🏻🏫 Examples
Namespace with package meta
If you have a CSS library, you can scope your custom properties to every release so that multiple versions of the library used in the same app doesn't yield any collisions.
const pkg = { return `--`; }
Hash custom properties
If you want to hash your custom properties to shorten/obfuscate them, pass in a hashing algorithm of your choice.
This demo uses a 6-character truncated MD5 hash; MD5 and the SHA-family has statistically good uniform distribution and can be truncated.
However, note that the shorter the hash, the higher the collision rate. There will be a warning if a collision is detected.
const crypto = ;const md5 = crypto; { return ; }
Advanced transformations
If you want to do something more complex—such as discriminate between global and local custom properties (eg. theme variables).
{ if property return property; return ; }
⚙️ Options
transformer(data)
<Function>
data
<Object>
property
<String>
- The custom property name that's being transformed. The--
prefix is omittedfilepath
<String>
- The path to the file where the custom property is being transformedcss
<String>
- The entire CSS code of the file