node-sass-json-importer
JSON importer for node-sass. Allows @import
ing .json
or .json5
files in Sass files parsed by node-sass
.
Usage
This module hooks into node-sass's importer api.
var sass = require('node-sass');
var jsonImporter = require('node-sass-json-importer');
sass.render({
file: scss_filename,
importer: jsonImporter,
[, options..]
}, function(err, result) { });
var result = sass.renderSync({
data: scss_content
importer: [jsonImporter, someOtherImporter]
[, options..]
});
node-sass command-line interface
To run this using node-sass CLI, point --importer
to your installed json importer, for example:
./node_modules/.bin/node-sass --importer node_modules/node-sass-json-importer/dist/node-sass-json-importer.js --recursive ./src --output ./dist
Webpack v1
import jsonImporter from 'node-sass-json-importer';
export default {
module: {
loaders: [{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}],
},
sassLoader: {
importer: jsonImporter
}
};
Webpack v2
import jsonImporter from 'node-sass-json-importer';
export default {
module: {
rules: [
test: /\.scss$/,
use: [
'style-loader',
{
loader: 'css-loader',
options: {
importLoaders: 1
},
},
{
loader: 'sass-loader',
options: {
importer: jsonImporter,
},
},
],
],
},
};
Importing strings
Since JSON doesn't map directly to SASS's data types, a common source of confusion is how to handle strings. While SASS allows strings to be both quoted and unquoted, strings containing spaces, commas and/or other special characters have to be wrapped in quotes. In terms of JSON, this means the string has to be double quoted:
Incorrect
{
"description": "A sentence with spaces."
}
Correct
{
"description": "'A sentence with spaces.'"
}
See discussion here for more:
https://github.com/Updater/node-sass-json-importer/pull/5
Thanks to
This module is based on the sass-json-vars gem, which unfortunately isn't compatible with node-sass
.