PostCSS plugin enabling configuration maps.
npm install postcss-map --save-dev
or
yarn add postcss-map --save-dev
const fs = require('fs');
const postcss = require('postcss');
const map = require('postcss-map');
let input = fs.readFileSync('input.css', 'utf8');
let opts = {
basePath: 'css',
maps: ['example.yml', 'breakpoints.yml', 'fonts.yml'],
};
postcss()
.use(map(opts))
.process(input)
.then(result => {
fs.writeFileSync('output.css', result.css);
});
map:
# example.yml
foo:
bar:
baz: 'yeah!'
input:
.baz {
content: map(example, foo, bar, baz);
}
output:
.baz {
content: 'yeah!';
}
map:
# breakpoints.yml
small: 320px
medium: 321px
large: 800px
input:
@media (min-width: map(breakpoints, medium)) {
.test {
width: 100%;
}
}
output:
@media (min-width: 321px) {
.test {
width: 100%;
}
}
map:
# fonts.yml
regular:
font-family: "'Spinnaker Regular', sans-serif"
font-weight: 'normal'
font-feature-settings: "'onum', 'kern', 'liga', 'dlig', 'clig'"
font-kerning: 'normal'
bold:
font-family: "'Spinnaker Bold', sans-serif"
font-weight: 'normal'
font-feature-settings: "'onum', 'kern', 'liga', 'dlig', 'clig'"
font-kerning: 'normal'
input:
.whatever {
@map fonts regular;
}
output:
.whatever {
font-family: 'Spinnaker Regular', sans-serif;
font-weight: normal;
font-feature-settings: 'onum', 'kern', 'liga', 'dlig', 'clig';
font-kerning: normal;
}
const fs = require('fs');
const postcss = require('postcss');
const map = require('postcss-map');
let input = fs.readFileSync('input.css', 'utf8');
let opts = {
basePath: 'css',
maps: [
{
dummy: {
one: 1,
two: 2,
},
},
'example.yml',
'breakpoints.yml',
'fonts.yml'
}]
};
postcss()
.use(map(opts))
.process(input)
.then(result => {
fs.writeFileSync('output.css', result.css);
});
input:
.whatever {
content: map(dummy, one);
}
.baz {
content: map(example, foo, bar, baz);
}
output:
.whatever {
content: 1;
}
.baz {
content: 'yeah!';
}
const fs = require('fs');
const postcss = require('postcss');
const map = require('postcss-map');
let input = fs.readFileSync('input.css', 'utf8');
let opts = {
maps: [
{
one: 1,
two: 2,
},
],
};
postcss()
.use(map(opts))
.process(input)
.then(result => {
fs.writeFileSync('output.css', result.css);
});
input:
.whatever {
content: map(one);
}
output:
.whatever {
content: 1;
}
type: String
default: process.cwd
Base path to retrieve maps from.
type: Array
default: []
An array representing maps files to load and parse.
Map files can either be in YAML or JSON format.
You can also pass literal objects directly into the Array.
type: string
default: config
A shorter syntax is also available, so you don't have to type the map name on each call. To enable it you need to either have a map called config
or only one map in your settings.
let opts = {
basePath: 'css',
maps: ['foo.yml']
// OR
maps: ['config.yml', 'breakpoints.yml']
};
map:
# config.yml
foo: 'foo value'
input:
.short {
content: map(foo);
}
output:
.short {
content: 'foo value';
}
Used in conjunction with postcss-plugin-context you can benefit from contextualized maps and leverage the short syntax.
@context brandColors {
h1 {
color: map(primary);
}
}
postcss-map is unlicensed.