Skip to content

Instantly share code, notes, and snippets.

@RhinoLu
Created June 16, 2017 08:24
Show Gist options
  • Save RhinoLu/4f84673617e58a4373662c2f8d7c37fb to your computer and use it in GitHub Desktop.
Save RhinoLu/4f84673617e58a4373662c2f8d7c37fb to your computer and use it in GitHub Desktop.
SCSS > CSS , with POSTCSS
/// <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 plugin = autoprefixer({ browsers: ["> 1%", "last 2 version"] }); // browserslist 瀏覽器支援 (市佔大於 1% 的瀏覽器版本 或 所有瀏覽器最新兩個版本 要廣泛滿足所有條件)
//let plugin = autoprefixer({ browsers: ["last 2 version"] }); // browserslist 瀏覽器支援 (所有瀏覽器最新兩個版本)
//let plugin = autoprefixer({ browsers: ["> 0%"] });
//let plugin = autoprefixer({ browsers: [""] }); // 不加 prefix
//let plugin = autoprefixer({ }); // defaults
let plugin = autoprefixer({ browsers: browserslist}); // 使用 package.json
let postcss = require('postcss'); // 增加瀏覽器支援
let CleanCSS = require('clean-css'); // 壓縮 minify
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 {
sass.render({
file: scss_filename
}, (err, result) => {
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")
});
}
@RhinoLu
Copy link
Author

RhinoLu commented Jun 16, 2017

"devDependencies": {
    "autoprefixer": "^7.1.1",
    "clean-css": "^4.1.3",
    "node-sass": "^4.5.2"
},
"scripts": {
    "test": "node js/renderCSS css/index.scss"
},

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment