mirror of https://github.com/curbengh/hexo-yam
				
				
				
			init code
This commit is contained in:
		
						commit
						b3be6d5b97
					
				| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
# Hexo-all-minifier
 | 
			
		||||
[](https://badge.fury.io/js/hexo-all-minifier)
 | 
			
		||||
[](https://www.npmjs.com/package/hexo-all-minifier)
 | 
			
		||||
 | 
			
		||||
All in one. Minifier & Optimization plugin for [Hexo](https://hexo.io).
 | 
			
		||||
Since most of the optimize plugin for [HEXO](https://hexo.io) have been deprecated, and [HEXO](https://hexo.io) has upgraded to 3.XX, so I decide to implement this plugin.
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
``` bash
 | 
			
		||||
$ npm install hexo-all-minifier --save
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Components
 | 
			
		||||
Integrate all the official minifier plugins of HEXO and a imagemin plugin:
 | 
			
		||||
- [hexo-html-minifier](https://github.com/hexojs/hexo-html-minifier), which is based on [HTMLMinifier](https://github.com/kangax/html-minifier)
 | 
			
		||||
- [hexo-clean-css](https://github.com/hexojs/hexo-clean-css), which is based on [clean-css](https://github.com/jakubpawlowicz/clean-css)
 | 
			
		||||
- [hexo-uglify](https://github.com/hexojs/hexo-uglify), which is based on [UglifyJS](http://lisperator.net/uglifyjs/)
 | 
			
		||||
- [hexo-imagemin](https://github.com/vseventer/hexo-imagemin), which is based on [imagemin](https://github.com/imagemin/imagemin)
 | 
			
		||||
 | 
			
		||||
Thanks for their works.
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
``` yaml
 | 
			
		||||
html_minifier:
 | 
			
		||||
  enable: true
 | 
			
		||||
  exclude: 
 | 
			
		||||
```
 | 
			
		||||
- **enable** - Enable the plugin. Defaults to `true`.
 | 
			
		||||
- **exclude**: Exclude files
 | 
			
		||||
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
``` yaml
 | 
			
		||||
css_minifier:
 | 
			
		||||
  enable: true
 | 
			
		||||
  exclude: 
 | 
			
		||||
    - '*.min.css'
 | 
			
		||||
```
 | 
			
		||||
- **enable** - Enable the plugin. Defaults to `true`.
 | 
			
		||||
- **exclude**: Exclude files
 | 
			
		||||
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
``` yaml
 | 
			
		||||
js_minifier:
 | 
			
		||||
  enable: true
 | 
			
		||||
  mangle: true
 | 
			
		||||
  output:
 | 
			
		||||
  compress:
 | 
			
		||||
  exclude: 
 | 
			
		||||
    - '*.min.js'
 | 
			
		||||
```
 | 
			
		||||
- **enable** - Enable the plugin. Defaults to `true`.
 | 
			
		||||
- **mangle**: Mangle file names
 | 
			
		||||
- **output**: Output options
 | 
			
		||||
- **compress**: Compress options
 | 
			
		||||
- **exclude**: Exclude files
 | 
			
		||||
 | 
			
		||||
----------
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
image_minifier:
 | 
			
		||||
  enable: true
 | 
			
		||||
  interlaced: false
 | 
			
		||||
  multipass: false
 | 
			
		||||
  optimizationLevel: 2
 | 
			
		||||
  pngquant: false
 | 
			
		||||
  progressive: false
 | 
			
		||||
```
 | 
			
		||||
- **enable** - Enable the plugin. Defaults to `true`.
 | 
			
		||||
- **interlaced** - Interlace gif for progressive rendering. Defaults to `false`.
 | 
			
		||||
- **multipass** - Optimize svg multiple times until it’s fully optimized. Defaults to `false`.
 | 
			
		||||
- **optimizationLevel** - Select an optimization level between 0 and 7. Defaults to `2`.
 | 
			
		||||
- **pngquant** - Enable [imagemin-pngquant](https://github.com/imagemin/imagemin-pngquant) plugin. Defaults to `false`.
 | 
			
		||||
- **progressive** - Lossless conversion to progressive. Defaults to `false`.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
To be continued
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,43 @@
 | 
			
		|||
/* global hexo */
 | 
			
		||||
var assign = require('object-assign');
 | 
			
		||||
 | 
			
		||||
//module.exports = function (hexo) {
 | 
			
		||||
    if (true === hexo.config.neat_enable) {
 | 
			
		||||
        // HTML minifier
 | 
			
		||||
        hexo.config.neat_html = assign({
 | 
			
		||||
            enable: true,
 | 
			
		||||
            exclude: [],
 | 
			
		||||
            ignoreCustomComments: [/^\s*more/],
 | 
			
		||||
            removeComments: true,
 | 
			
		||||
            removeCommentsFromCDATA: true,
 | 
			
		||||
            collapseWhitespace: true,
 | 
			
		||||
            collapseBooleanAttributes: true,
 | 
			
		||||
            removeEmptyAttributes: true,
 | 
			
		||||
            minifyJS: true,
 | 
			
		||||
            minifyCSS: true,
 | 
			
		||||
        }, hexo.config.neat_html);
 | 
			
		||||
 | 
			
		||||
        // Css minifier
 | 
			
		||||
        hexo.config.neat_css = assign({
 | 
			
		||||
            enable: true,
 | 
			
		||||
            exclude: ['*.min.css']
 | 
			
		||||
        }, hexo.config.neat_css);
 | 
			
		||||
 | 
			
		||||
        // Js minifier
 | 
			
		||||
        hexo.config.neat_js = assign({
 | 
			
		||||
            enable: true,
 | 
			
		||||
            mangle: true,
 | 
			
		||||
            output: {},
 | 
			
		||||
            compress: {},
 | 
			
		||||
            exclude: ['*.min.js']
 | 
			
		||||
        }, hexo.config.neat_js, {
 | 
			
		||||
                fromString: true
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        var filter = require('./lib/filter');
 | 
			
		||||
        hexo.extend.filter.register('after_render:html', filter.logic_html);
 | 
			
		||||
        hexo.extend.filter.register('after_render:css', filter.logic_css);
 | 
			
		||||
        hexo.extend.filter.register('after_render:js', filter.logic_js);
 | 
			
		||||
    }
 | 
			
		||||
//}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
/* global hexo */
 | 
			
		||||
'use strict';
 | 
			
		||||
var CleanCSS = require('clean-css'),
 | 
			
		||||
    UglifyJS = require('uglify-js'),
 | 
			
		||||
    Htmlminifier = require('html-minifier').minify,
 | 
			
		||||
    streamToArray = require('stream-to-array');
 | 
			
		||||
var Promise = require('bluebird');
 | 
			
		||||
var minimatch = require('minimatch');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function logic_html(str, data) {
 | 
			
		||||
    var hexo = this,
 | 
			
		||||
        options = hexo.config.html_minifier;
 | 
			
		||||
    // Return if disabled.
 | 
			
		||||
    if (false === options.enable) return;
 | 
			
		||||
 | 
			
		||||
    var path = data.path;
 | 
			
		||||
    var exclude = options.exclude;
 | 
			
		||||
    if (exclude && !Array.isArray(exclude)) exclude = [exclude];
 | 
			
		||||
 | 
			
		||||
    if (path && exclude && exclude.length) {
 | 
			
		||||
        for (var i = 0, len = exclude.length; i < len; i++) {
 | 
			
		||||
            if (minimatch(path, exclude[i])) return str;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var log = hexo.log || console.log;
 | 
			
		||||
    var result = Htmlminifier(str, options);
 | 
			
		||||
    var saved = ((str.length - result.length) / str.length * 100).toFixed(2);
 | 
			
		||||
    log.log('neat the html: %s [ %s saved]', path, saved + '%');
 | 
			
		||||
    return result;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function logic_css(str, data) {
 | 
			
		||||
    var hexo = this,
 | 
			
		||||
        options = hexo.config.css_minifier;   
 | 
			
		||||
    // Return if disabled.
 | 
			
		||||
    if (false === options.enable) return;
 | 
			
		||||
 | 
			
		||||
    var path = data.path;
 | 
			
		||||
    var exclude = options.exclude;
 | 
			
		||||
    if (exclude && !Array.isArray(exclude)) exclude = [exclude];
 | 
			
		||||
 | 
			
		||||
    if (path && exclude && exclude.length) {
 | 
			
		||||
        for (var i = 0, len = exclude.length; i < len; i++) {
 | 
			
		||||
            if (minimatch(path, exclude[i])) return str;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    var log = hexo.log || console.log;
 | 
			
		||||
    return new Promise(function (resolve, reject) {
 | 
			
		||||
        new CleanCSS(options).minify(str, function (err, result) {
 | 
			
		||||
            if (err) return reject(err);
 | 
			
		||||
            var saved = ((str.length - result.styles.length) / str.length * 100).toFixed(2);
 | 
			
		||||
            resolve(result.styles);
 | 
			
		||||
            log.log('neat the css: %s [ %s saved]', path, saved + '%');
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function logic_js(str, data) {
 | 
			
		||||
    var hexo = this,
 | 
			
		||||
        options = hexo.config.js_minifier;
 | 
			
		||||
    // Return if disabled.
 | 
			
		||||
    if (false === options.enable) return;
 | 
			
		||||
 | 
			
		||||
    var path = data.path;
 | 
			
		||||
    var exclude = options.exclude;
 | 
			
		||||
    if (exclude && !Array.isArray(exclude)) exclude = [exclude];
 | 
			
		||||
 | 
			
		||||
    if (path && exclude && exclude.length) {
 | 
			
		||||
        for (var i = 0, len = exclude.length; i < len; i++) {
 | 
			
		||||
            if (minimatch(path, exclude[i])) return str;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var log = hexo.log || console;
 | 
			
		||||
    var result = UglifyJS.minify(str, options);
 | 
			
		||||
    var saved = ((str.length - result.code.length) / str.length * 100).toFixed(2);
 | 
			
		||||
    log.log('neat the js: %s [ %s saved]', path, saved + '%');
 | 
			
		||||
 | 
			
		||||
    return result.code;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    logic_html: logic_html,
 | 
			
		||||
    logic_css: logic_css,
 | 
			
		||||
    logic_js: logic_js,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
{
 | 
			
		||||
  "author": {
 | 
			
		||||
    "name": "rozbo"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "bluebird": "^3.3.5",
 | 
			
		||||
    "clean-css": "^2.9.x",
 | 
			
		||||
    "html-minifier": "^2.1.2",
 | 
			
		||||
    "minimatch": "^3.0.0",
 | 
			
		||||
    "object-assign": "^4.1.0",
 | 
			
		||||
    "stream-to-array": "^2.3.0",
 | 
			
		||||
    "uglify-js": "~2.6.2"
 | 
			
		||||
  },
 | 
			
		||||
  "description": "auto Minify html、js、css and make it neat",
 | 
			
		||||
  "devDependencies": {},
 | 
			
		||||
  "directories": {},
 | 
			
		||||
  "keywords": [
 | 
			
		||||
    "html",
 | 
			
		||||
    "js",
 | 
			
		||||
    "css",
 | 
			
		||||
    "hexo",
 | 
			
		||||
    "minify"
 | 
			
		||||
  ],
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "name": "hexo-neat",
 | 
			
		||||
  "optionalDependencies": {},
 | 
			
		||||
  "readme": "ERROR: No README data found!",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1"
 | 
			
		||||
  },
 | 
			
		||||
  "version": "0.1.2"
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue