index.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. 'use strict';
  2. var path = require('path');
  3. var fs = require('graceful-fs');
  4. var gutil = require('gulp-util');
  5. var map = require('map-stream');
  6. var CleanCSS = require('clean-css');
  7. var filesize = require('filesize');
  8. var tempWrite = require('temp-write');
  9. module.exports = function (options) {
  10. return map(function (file, cb) {
  11. if (file.isNull()) {
  12. return cb(null, file);
  13. }
  14. if (file.isStream()) {
  15. return cb(new gutil.PluginError('gulp-cssmin', 'Streaming not supported'));
  16. }
  17. if (['.css'].indexOf(path.extname(file.path)) === -1) {
  18. gutil.log('gulp-cssmin: Skipping unsupported css ' + gutil.colors.blue(file.relative));
  19. return cb(null, file);
  20. }
  21. tempWrite(file.contents, path.extname(file.path), function (err, tempFile) {
  22. if (err) {
  23. return cb(new gutil.PluginError('gulp-cssmin', err));
  24. }
  25. fs.stat(tempFile, function (err, stats) {
  26. if (err) {
  27. return cb(new gutil.PluginError('gulp-cssmin', err));
  28. }
  29. options = options || {};
  30. fs.readFile(tempFile, { encoding : 'UTF-8'}, function(err, data) {
  31. if (err) {
  32. return cb(new gutil.PluginError('gulp-cssmin', err));
  33. }
  34. var minimized = new CleanCSS(options).minify(data).styles;
  35. if (options.showLog) {
  36. gutil.log('gulp-cssmin:', gutil.colors.green('✔ ') + file.relative);
  37. }
  38. file.contents = new Buffer(minimized);
  39. cb(null, file);
  40. });
  41. });
  42. });
  43. });
  44. };