scripts/buildMixins.js (38 lines of code) (raw):
// ==================
// 'mixins.scss' needs to be added to the build folder so the core
// library SCSS mixins '@bp' and '@bpc' are available to import.
// For the sake of neatness, the '@import variables' line is replaced
// with the file contents, so we only have a single .scss build file
// ==================
// Imports
// ==================
const fs = require('fs');
const mixins = 'src/mixins.scss';
const variables = 'src/scss/_variables.scss';
const importStatement = "@import 'scss/variables';";
const outputDist = 'dist/mixins.scss';
const outputLib = 'lib/mixins.scss';
fs.readFile(mixins, 'utf8', (err, data) => {
if (err) {
throw err;
}
let mixinsFile = data.split('\n');
// Find line index of variable '@import' statement
const importIndex = mixinsFile.findIndex(
line => line.indexOf(importStatement) >= 0,
);
fs.readFile(variables, 'utf8', (err, data) => {
if (err) {
throw err;
}
const variablesFile = data.split('\n');
// Reassemble 'mixins.scss' with '_variables.scss' inline
mixinsFile = [
mixinsFile.slice(0, importIndex),
variablesFile,
mixinsFile.slice(importIndex + 2, mixinsFile.length),
];
// Flatten (array of arrays)
mixinsFile = [].concat(...mixinsFile);
// Merge back into a file
mixinsFile = mixinsFile.join('\n');
// Write our amended file to /dist & /lib folders
fs.writeFile(outputDist, mixinsFile, err => {
if (err) {
throw err;
}
});
fs.writeFile(outputLib, mixinsFile, err => {
if (err) {
throw err;
}
});
});
});