123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- const postcss = require('postcss');
- const cssnext = require('postcss-preset-env');
- const cssnested = require('postcss-nested');
- const cssmqpacker = require('css-mqpacker');
- const cssprettify = require('postcss-prettify');
- const cssclean = require('clean-css');
- const path = require('path');
- const fs = require('fs');
- function postcssCompiler(config) {
- const { file, dest, minify = true } = config;
- const fileName = path.basename(file);
- const from = path.join(__dirname, '../', file);
- const to = path.join(__dirname, '../', dest, fileName);
- const fileNameMin = path.extname(fileName);
- const min = path.join(__dirname, '../', dest, fileName.replace(fileNameMin, `.min${fileNameMin}`));
- const css = fs.readFileSync(from, 'utf8');
- return new Promise((resolve, reject) => {
- return postcss([
- cssnested(),
- cssnext({
- stage: 0,
- browsers: ['last 2 version'],
- features: {
- calc: false
- }
- }),
- cssmqpacker({
- sort: true
- }),
- cssprettify()
- ])
- .process(css, {
- from,
- to
- })
- .then((result) => {
- if (result && result.css) {
- fs.writeFile(to, result.css, 'utf8', (err) => reject(err));
- if (minify) {
- const minified = new cssclean({}).minify(result.css);
- fs.writeFile(min, minified.styles, 'utf8', (err) => reject(err));
- if (result.map) {
- fs.writeFile(to + '.map', result.map, 'utf8', (err) => reject(err));
- }
- }
- resolve(to);
- } else {
- reject(result);
- }
- })
- .catch((err) => {
- console.log(err);
- reject(err);
- });
- });
- }
- module.exports = postcssCompiler;
|