mirror of https://github.com/curbengh/hexo-yam
init code
This commit is contained in:
commit
b3be6d5b97
|
@ -0,0 +1,79 @@
|
||||||
|
# Hexo-all-minifier
|
||||||
|
[![npm version](https://badge.fury.io/js/hexo-all-minifier.svg)](https://badge.fury.io/js/hexo-all-minifier)
|
||||||
|
[![NPM Dependencies](https://david-dm.org/unhealthy/hexo-all-minifier.svg)](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