Node Sass importer for for importing JSON files as maps
This is ALPHA software.
It's messy. It's probably slow. It's probably buggy.
Give it a shot. File bugs. Be patient.
- Node >= 6
- node-sass >= 4.9.0
This package has a peer dependency on Node Sass for ensure import API compatibility.
npm install @node-sass/json-importer node-sassCreate a JSON file you want to import.
// config.json
{
"colors": {
"red": "#f00",
"blue": "#00f"
},
"sizes": ["16px", "20px", "24px"],
}When Node Sass parses an @import for a .json URL it will try load the file from disk. If found the JSON object will be imported as a Sass map named after the .json file.
@import "config.json";
$colors: map-get($config, "colors");
$sizes: map-get($config, "sizes");
.button {
color: map-get($colors, "red");
size: nth($sizes, 2);
}Produces the following CSS output
.button {
color: "#f00";
size: "medium";
}var sass = require('node-sass');
var jsonImporter = require('@node-sass/json-importer');
sass.render({
file: 'index.scss',
importer: [jsonImporter],
}, function (err, result) {
if (err) throw err;
console.log(result.css.toString());
});$ node-sass index.scss --importer node_modules/@node-sass/json-importer/index.jsSass has many types. Number which represent CSS numbers values with optional unit like 16px. Color which represents CSS colour values like red, or #f00. These are structurally different from String like "hello", "16px", "red", or "#f00.
To reduce complexity the values produced by this importer are always String. As a result you may need to unquote() the values to cast them into their intended types if for example you wanted to do math on them.