From 819ec0b7769fcbf9897bdbb6ab7b2cc40de57c97 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Sun, 11 Mar 2018 13:10:43 -0400 Subject: [PATCH] minify HTML templates - fixes #15 --- package.json | 3 ++- src/middleware.ts | 3 ++- src/middleware/minify_html.ts | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/middleware/minify_html.ts diff --git a/package.json b/package.json index c9eaaf5..d7d071a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "sapper", "version": "0.9.3", "description": "Military-grade apps, engineered by Svelte", - "main": "middleware.js", + "main": "dist/middleware.ts.js", "bin": { "sapper": "./sapper" }, @@ -23,6 +23,7 @@ "clorox": "^1.0.3", "devalue": "^1.0.1", "glob": "^7.1.2", + "html-minifier": "^3.5.10", "mkdirp": "^0.5.1", "node-fetch": "^1.7.3", "polka": "^0.3.4", diff --git a/src/middleware.ts b/src/middleware.ts index d913624..8ed1542 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -5,6 +5,7 @@ import mkdirp from 'mkdirp'; import rimraf from 'rimraf'; import devalue from 'devalue'; import { lookup } from './middleware/mime'; +import { minify_html } from './middleware/minify_html'; import { create_routes, create_compilers } from './core'; import { dest, dev } from './config'; import { Route, Template } from './interfaces'; @@ -113,7 +114,7 @@ const resolved = Promise.resolve(); function get_route_handler(chunks: Record, routes: RouteObject[]) { const template = dev() ? () => fs.readFileSync('app/template.html', 'utf-8') - : (str => () => str)(fs.readFileSync('app/template.html', 'utf-8')); + : (str => () => str)(minify_html(fs.readFileSync('app/template.html', 'utf-8'))); function handle_route(route: RouteObject, req: Req, res: ServerResponse) { req.params = route.params(route.pattern.exec(req.pathname)); diff --git a/src/middleware/minify_html.ts b/src/middleware/minify_html.ts new file mode 100644 index 0000000..b675c10 --- /dev/null +++ b/src/middleware/minify_html.ts @@ -0,0 +1,21 @@ +import { minify } from 'html-minifier'; + +export function minify_html(html: string) { + return minify(html, { + collapseBooleanAttributes: true, + collapseWhitespace: true, + conservativeCollapse: true, + decodeEntities: true, + html5: true, + minifyCSS: true, + minifyJS: true, + removeAttributeQuotes: true, + removeComments: true, + removeOptionalTags: true, + removeRedundantAttributes: true, + removeScriptTypeAttributes: true, + removeStyleLinkTypeAttributes: true, + sortAttributes: true, + sortClassName: true + }); +} \ No newline at end of file