Authored by 毕凯

支持 cssnano

1 'use strict'; 1 'use strict';
2 const css = require('../css'); 2 const css = require('../css');
  3 +const co = require('bluebird').coroutine;
3 4
4 -const detail = (req, res) => {  
5 - res.render('guang/detail', {  
6 - css: css('guang/detail.css'),  
7 - msg: 'xxxxxxx'  
8 - }); 5 +const detail = (req, res, next) => {
  6 + co(function* () {
  7 + return res.render('guang/detail', {
  8 + css: yield css('guang/detail.css'),
  9 + msg: 'xxxxxxx'
  10 + });
  11 + })().catch(next);
9 }; 12 };
10 13
11 module.exports = { 14 module.exports = {
1 const fs = require('fs'); 1 const fs = require('fs');
2 const path = require('path'); 2 const path = require('path');
  3 +const cssnano = require('cssnano');
3 4
  5 +const logger = global.yoho.logger;
4 const css = {}; 6 const css = {};
5 7
6 module.exports = (file) => { 8 module.exports = (file) => {
7 - if (css[file]) {  
8 - return css[file]; 9 + const isDev = process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'test';
  10 +
  11 + if (css[file] && !isDev) {
  12 + return Promise.resolve(css[file]);
9 } 13 }
10 14
11 const cssPath = path.join(__dirname, 'css', file); 15 const cssPath = path.join(__dirname, 'css', file);
12 const cssfile = fs.readFileSync(cssPath).toString(); 16 const cssfile = fs.readFileSync(cssPath).toString();
13 17
14 - css[file] = cssfile;  
15 -  
16 - return css[file]; 18 + return cssnano.process(cssfile, {
  19 + safe: true,
  20 + autoprefixer: {
  21 + add: true,
  22 + browsers: ['> 1%', 'android >=4', 'ios >=8']
  23 + }
  24 + }).then(function(result) {
  25 + if (result && result.css) {
  26 + css[file] = result.css;
  27 + return css[file];
  28 + }
  29 + return '';
  30 + }).catch(err => {
  31 + logger.error(err);
  32 + return '';
  33 + });
17 }; 34 };
1 body { 1 body {
  2 + display: flex;
2 3
  4 + a {
  5 + display: none;
  6 + }
3 } 7 }
@@ -26,6 +26,7 @@ @@ -26,6 +26,7 @@
26 "body-parser": "^1.16.1", 26 "body-parser": "^1.16.1",
27 "captchapng": "0.0.1", 27 "captchapng": "0.0.1",
28 "cheerio": "^0.22.0", 28 "cheerio": "^0.22.0",
  29 + "cssnano": "^3.10.0",
29 "client-sessions": "^0.8.0", 30 "client-sessions": "^0.8.0",
30 "compression": "^1.6.2", 31 "compression": "^1.6.2",
31 "connect-memcached": "^0.2.0", 32 "connect-memcached": "^0.2.0",
@@ -62,7 +63,6 @@ @@ -62,7 +63,6 @@
62 "babel-polyfill": "^6.23.0", 63 "babel-polyfill": "^6.23.0",
63 "babel-preset-env": "^1.4.0", 64 "babel-preset-env": "^1.4.0",
64 "css-loader": "^0.28.1", 65 "css-loader": "^0.28.1",
65 - "cssnano": "^3.10.0",  
66 "eslint": "^3.19.0", 66 "eslint": "^3.19.0",
67 "eslint-config-yoho": "^1.0.1", 67 "eslint-config-yoho": "^1.0.1",
68 "eslint-loader": "^1.7.1", 68 "eslint-loader": "^1.7.1",