@digitallyhappy/backstrap
Version:
Free Bootstrap 4 Admin Panel HTML Template
127 lines (114 loc) • 3.16 kB
JavaScript
const autoprefixer = require('autoprefixer');
const chalk = require('chalk')
const fs = require('fs')
const glob = require('glob')
const mkdirp = require('mkdirp')
const path = require('path')
const postcss = require('postcss');
const sass = require('node-sass')
const sh = require('shelljs')
const basename = path.basename
const dirname = path.dirname
const resolve = path.resolve
const normalize = path.normalize
const join = path.join
const relative = path.relative
const extension = path.extname
const vendors = () => {
const cwd = 'src/scss/vendors/'
const pattern = '**/*.scss'
const ignore = '**/_*.scss'
const options = {
cwd: cwd,
ignore: ignore
}
const filenames = new glob.sync(pattern, options)
return filenames.map((filename) => {
const obj = {}
obj['dir'] = filename.split('/')[0]
obj['path'] = resolve(cwd, filename)
return obj
})
}
const compileSass = (options = {}) => {
// set default options
options = Object.assign({
style: 'expanded'
}, options);
// render the result
let compiled
try {
compiled = sass.renderSync({
file: options.src,
outFile: options.dest,
outputStyle: options.style,
precision: 6,
sourceMap: true,
sourceMapContents: true
})
} catch(e) {
// catch error, the process crashed
const error = `
file: ${e.file},
line: ${e.line},
column: ${e.column},
message: ${e.message},
formatted: ${e.formatted}
`
console.log(chalk.red(error))
return
}
if (compiled && compiled.css){
console.log(chalk.green('Rendering Complete, saving .css file...'))
console.log(chalk.green(`Wrote CSS to ${options.dest}`))
console.log(chalk.green(`Wrote Source Map to ${options.map}`))
console.log(`\n`)
// add prefixes
const prefixed = postcss([ autoprefixer ]).process(compiled.css, {
from: options.src,
to: options.dest
})
prefixed.then((result) => {
result.warnings().forEach((warning) => {
console.warn(warning.toString())
})
// write the result to file
mkdirp(dirname(options.dest), (error) => {
if (error) return cb(error)
// create .css file
fs.writeFile(options.dest,result.css, (error) => {
if (error) return cb(error)
})
// create .css.map file
fs.writeFile(options.map,compiled.map, (error) => {
if (error) return cb(error)
})
console.log(' ' + options.dest + ' built.');
})
})
}
}
const compile = (vendors) => {
vendors.forEach((vendor) => {
const dest = resolve(__dirname, '..', 'src/vendors', vendor.dir, 'css', path.parse(vendor.path).name)
// Expanded
compileSass({
src : vendor.path,
dest: dest + '.css',
map: dest + '.css.map'
});
// Minified
compileSass({
src : vendor.path,
dest: dest + '.min.css',
map: dest + '.min.css.map',
style: 'compressed'
});
})
}
const main = () => {
compile(vendors())
}
main()