Skip to content

Instantly share code, notes, and snippets.

@RhinoLu
Created July 20, 2017 04:30
Show Gist options
  • Save RhinoLu/42aec764e43d34c8aa93e4f7778e311a to your computer and use it in GitHub Desktop.
Save RhinoLu/42aec764e43d34c8aa93e4f7778e311a to your computer and use it in GitHub Desktop.
Node render SASS/SCSS
/// <reference path="../node_modules/@types/node/index.d.ts" />
let path = require("path");
let fs = require("fs");
let sass = require('node-sass'); // SCSS 轉 CSS
let browserslist = require('../package.json').browserslist;
let autoprefixer = require('autoprefixer'); // 增加瀏覽器支援,依賴 postcss
let postcss = require('postcss'); // 增加瀏覽器支援
let CleanCSS = require('clean-css'); // 壓縮 minify
let plugin = autoprefixer({ browsers: browserslist}); // 使用 package.json
let target_scss: string;
/*process.argv.forEach((val, index) => {
console.log(`${index}: ${val}`);
});*/
if(process.argv.length > 2 && process.argv[2].indexOf(".scss") > -1){
// console.time("postcss");
target_scss = process.argv[2];
convertToOriginalCSS(target_scss);
} else {
console.log("?");
}
function convertToOriginalCSS(scss_filename: string): void {
// console.log("convertToOriginalCSS : " + scss_filename);
sass.render({
file: scss_filename
}, (err, result) => {
if(err){
console.log(err);
} else {
convertToPostCSS(result.css.toString());
}
});
}
function convertToPostCSS(css: string): void {
// console.log(css);
postcss([plugin ]).process(css).then(function (result) {
result.warnings().forEach(function (warn) {
console.warn(warn.toString());
});
//console.log(result.css);
//console.log(new CleanCSS({}).minify(result.css).styles);
saveFile(result.css, target_scss.replace(".scss", ".css")); // 未壓縮
// saveFile(new CleanCSS({}).minify(result.css).styles, target_scss.replace(".scss", ".css")); // 壓縮
});
}
// save output css
function saveFile(res: any, outputPath: string): void {
// console.log(res);
fs.writeFile(outputPath, res, function(err) {
if(err) { return console.log(err); }
console.log(outputPath + " was saved!");
console.timeEnd("postcss")
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment