Complemento minifyHtml
Visión General
Este complemento postRenderer
para Scully prerenderizará los HTML de tus rutas minificados. Es decir, remueve el código innecesario reduciendo el tamaño de tus archivos.
¡Aumentará considerablemente el tiempo de carga!
Instalación
Para instalar esta librería con npm
ejecuta:
$ npm install scully-plugin-minify-html --save-dev
o con yarn
$ yarn add scully-plugin-minify-html
Este paquete depende del paquete html-minifier
. Que será instalado automáticamente cuando se instale este complemento.
Uso9
Importa y agrega el complemento a defaultPostRenderers
para que ejecute sobre todas las páginas renderizadas o utiliza postRenderers
en cada ruta.
Importante: la actual configuración de Scully dice que si utilizas la opción postRenderers
sobre una ruta, ignorará la configuración global en defaultPostRenderers
.
Para más información, visita: https://github.com/scullyio/scully/issues/595
const { RouteTypes } = require('@scullyio/scully');
const { MinifyHtml } = require('scully-plugin-minify-html');
const postRenderers = [MinifyHtml];
exports.config = {
projectRoot: './src/app',
defaultPostRenderers: postRenderers, // for all routes
routes: {
'/blog/:slug': {
type: RouteTypes.contentFolder,
slug: {
folder: './blog',
},
postRenderers: postRenderers, // per route config
},
},
};
Compila la aplicación y luego sólo debes ejecutar el comando de Scully.
npm run build --prod
npx scully
Configurando html-minifier
El complemento MinifyHtml
usa html-minifier por debajo, por eso podemos configurar las opciones de minificado que se están usando.
Las opciones disponibles las podemos encontrar en la interfaz Options
La configuración actual por defecto es:
import { Options } from 'html-minifier';
const defaultMinifyOptions: Options = {
caseSensitive: true,
removeComments: true,
collapseWhitespace: true,
collapseBooleanAttributes: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
minifyCSS: true,
minifyJS: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
// don't remove attribute quotes, not all social media platforms can parse this over-optimization
removeAttributeQuotes: false,
// don't remove optional tags, like the head, not all social media platforms can parse this over-optimization
removeOptionalTags: false,
// scully specific HTML comments
// this will always be added in the final minifyOptions config
ignoreCustomComments: [/scullyContent-(begin|end)/],
// scully specific data injection
// this will always be added in the final minifyOptions config
ignoreCustomFragments: [/\/\*\* ___SCULLY_STATE_(START|END)___ \*\//],
};
Para configurar las opciones se puede hacer con la función setPluginConfig
.
Puedes especificar un subconjunto de opciones que sobre-escribirán la configuración por defecto.
const { RouteTypes, setPluginConfig } = require('@scullyio/scully');
const { MinifyHtml, MinifyHtmlOptions } = require('scully-plugin-minify-html');
const postRenderers = [MinifyHtml];
const minifyHtmlOptions: MinifyHtmlOptions = {
minifyOptions: {
removeComments: false,
},
};
setPluginConfig(MinifyHtml, 'render', minifyHtmlOptions);
// or
// setPluginConfig(MinifyHtml, minifyHtmlOptions);
exports.config = {
projectRoot: './src/app',
defaultPostRenderers: postRenderers,
routes: {
'/blog/:slug': {
type: RouteTypes.contentFolder,
slug: {
folder: './blog',
},
postRenderers: postRenderers,
},
},
};