Como sugestão de extensão para o trabalho, propõem-se:
a) melhora no algoritmo de configuração da qualidade de imagens para apresentar
63 compactação mais homogênea entre as opções;
b) melhora na possibilidade de parametrização da API e configuração da ferramenta web para permitir que cliente tenha mais controle sobre as transformações que a minificação e otimização podem realizar nos arquivos;
c) experimentos verificando a eficácia da minificação e otimização com mais arquivos para analisar o grau de confiabilidade da API;
d) conferência automatizada da eficiência da minificação e otimização durante o processo para verificar se o arquivo permanece consistente, sem precisar que o usuário abra a página para perceber que houve diferenças visuais.
64 REFERÊNCIAS
AKAMAI. Akamai. 2017. Disponível em: <https://www.akamai.com/us/en/about/our-thinking/state-of-the-internet-report/>. Acesso em: 21 maio 2017.
ATOM. ATOM. [2017]. Disponível em <http://flight-manual.atom.io/getting-started/sections/why-atom/>. Acesso em: 03 nov. 2017.
BABEL-MINIFY. Babel-Minify. 2017. Disponível em <https://github.com/babel/minify/>.
Acesso em: 08 nov. 2017.
BABEL-PRESET-MINIFY. babel-preset-minify. 2017. Disponível em
<https://github.com/babel/minify/tree/master/packages/babel-preset-minify/>. Acesso em: 08 nov. 2017.
BELSHE, Mike. More Bandwidth Doesn’t Matter (Much). 2010. Disponível em: <
https://docs.google.com/a/chromium.org/viewer?a=v&pid=sites&srcid=Y2hyb21pdW0ub3Jnf GRldnxneDoxMzcyOWI1N2I4YzI3NzE2/>. Acesso em: 21 maio 2017.
BUCKLER, Craig. Best JavaScript Frameworks, Libraries and Tools to use in 2017.
2017. Disponível em: <https://www.sitepoint.com/top-javascript-frameworks-libraries-tools-use/>. Acesso em: 17 nov. 2017.
CLOSURE COMPILER JS. Closure Compiler JS. 2017. Disponível em
<https://github.com/google/closure-compiler-js/>. Acesso em: 08 nov. 2017.
COMPRESS-IMAGES. Compress-Images. 2017. Disponível em
<https://github.com/semiromid/compress-images/>. Acesso em: 08 nov. 2017.
CRASS. Crass. 2017. Disponível em <https://github.com/ben-eb/cssnano/>. Acesso em: 08 nov. 2017.
CSS-MINIFICATION-BENCHMARK. css-minification-benchmark. 2017. Disponível em
<https://goalsmashers.github.io/css-minification-benchmark/>. Acesso em: 09 nov. 2017.
CSSNANO. Cssnano. 2017. Disponível em <https://github.com/ben-eb/cssnano/>. Acesso em: 08 nov. 2017.
EXPRESS. Express. [2017]. Disponível em <http://expressjs.com/>. Acesso em: 03 nov.
2017.
GRIGORIK, Ilya. Constructing the Object Model. 2017a. Disponível em:
<https://developers.google.com/web/fundamentals/performance/critical-rendering-path/constructing-the-object-model/>. Acesso em: 20 maio 2017.
_____. High Performance Browser Networking. 1. ed. Sebastopol: O’Reilly Media, 2013.
_____. Image Optimization. 2017b. Disponível em:
<https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/image-optimization/>. Acesso em: 21 maio 2017.
_____. Latency: The New Web Performance Bottleneck. 2012. Disponível em:
<https://www.igvita.com/2012/07/19/latency-the-new-web-performance-bottleneck/>. Acesso em: 20 maio 2017.
_____. Render-Tree, Construct, Layout and Paint. 2017c. Disponível em:
<https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-tree-construction/>. Acesso em: 20 maio 2017.
65 HTMLCOMPRESSOR. HTMLCompressor. 2017. Disponível em:
<https://htmlcompressor.com/>. Acesso em: 09 nov. 2017.
HTMLMINIFIER. HTMLMinifier. 2017. Disponível em <https://github.com/kangax/html-minifier/>. Acesso em: 08 nov. 2017.
HTTP ARCHIVE. HTTP Archive. 2017. Disponível em: <http://httparchive.org/>. Acesso em: 18 mar. 2017.
HU, Yu Hen. ECE533 Digital Image Processing. 2012. Disponível em:
<https://homepages.cae.wisc.edu/~ece533/>. Acesso em: 10 out. 2017.
IMAGE-OPTIMIZER. image-optimizer. 2017. Disponível em
<https://github.com/mcevskb/image-optimizer/>. Acesso em: 08 nov. 2017.
IMAGEMIN. imagemin. 2017. Disponível em <https://github.com/imagemin/imagemin/>.
Acesso em: 08 nov. 2017.
IMAGEMIN-MOZJPEG. imagemin-mozjpeg. 2017. Disponível em
<https://github.com/imagemin/imagemin-mozjpeg/>. Acesso em: 08 nov. 2017.
IMAGEMIN-PNGQUANT. imagemin-pngquant. 2017. Disponível em
<https://github.com/imagemin/imagemin-pngquant/>. Acesso em: 08 nov. 2017.
IMAGEMINPLUGINS. Imageminplugins. 2017. Disponível em
<https://www.npmjs.com/browse/keyword/imageminplugin/>. Acesso em: 08 nov. 2017.
LIBJPEG-TURBO. What About mozjpeg? 2017. Disponível em <https://libjpeg-turbo.org/About/Mozjpeg/>. Acesso em: 10 nov. 2017.
MINIFIER. Minifier. 2017. Disponível em: <http://www.minifier.org/>. Acesso em: 25 mar.
2017.
MINIMIZE. Minimize. 2017. Disponível em: <https://github.com/Swaagie/minimize/>.
Acesso em: 30 set. 2017.
MINIFY CODE. Minify Code. 2017. Disponível em: <http://minifycode.com/>. Acesso em:
25 mar. 2017.
MOZILLA. Fetch API. 2017a. Disponível em: <https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/>. Acesso em: 15 nov. 2017.
_____. HTTP response status codes. 2017b. Disponível em:
<https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/>. Acesso em: 15 nov. 2017.
_____. Introducing the ‘mozjpeg’ Project. 2017c. Disponível em:
<https://research.mozilla.org/2014/03/05/introducing-the-mozjpeg-project/>. Acesso em: 15 nov. 2017.
_____. Promise. 2017d. Disponível em:
<https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Promise/>. Acesso em: 15 nov. 2017.
NDEGWA. Amos. 2017. Disponível em <https://blog.stackpath.com/glossary/critical-rendering-path/>. Acesso em: 19 nov. 2017.
NGINX. Nginx. [2017]. Disponível em <https://nginx.org/en/>. Acesso em: 19 nov. 2017.
NODE. Node.js. [2017]. Disponível em <https://nodejs.org/en/about/>. Acesso em: 03 nov.
2017.
NODE-FETCH. node-fetch. [2017]. Disponível em <https://github.com/bitinn/node-fetch/>.
Acesso em: 17 nov. 2017.
66 NPM. npm. [2017]. Disponível em <https://www.npmjs.com/about/>. Acesso em: 03 nov.
2017.
PETROV, Kleo. Everything you need to know about BabelJS. 2016. Disponível em:
<https://kleopetrov.me/2016/03/18/everything-about-babel/>. Acesso em: 13 nov. 2017.
PNGQUANT. pngquant. [2017]. Disponível em <https://pngquant.org/>. Acesso em: 14 nov.
2017.
RAWZOR. The New Test Images. 2015. Disponível em
<http://imagecompression.info/test_images/>. Acesso em: 14 out. 2017.
SOUDERS, Steve. High Performance Web Sites. 1. ed. Sebastopol: O’Reilly Media, 2007.
______. Even Faster Web Sites. 1. ed. Sebastopol: O’Reilly Media, 2009.
TANENBAUM, Andrew S. Computer Networks. 5. ed. Upper Saddle River: Prentice Hall, 2010.
TECHNET. TechNet. Using command redirection operators. 2017. Disponível em:
<https://technet.microsoft.com/en-us/library/bb490982.aspx/>. Acesso em: 17 nov. 2017.
TELEOGRAPHY. Global Bandwidth Research Service. 2016. Disponível em:
<https://www.telegeography.com/page_attachments/products/website/research-services/global-bandwidth-research-service/0006/7209/gb16-exec-sum.pdf/>. Acesso em: 21 maio 2017.
TINYPNG. Tiny PNG. 2017. Disponível em: <https://tinypng.com/>. Acesso em:
25 mar. 2017.
URBAN, Diego Leonardo. Base de arquivos. Blumenau, 2017a. Disponível em:
<https://www.dropbox.com/s/q4yceimdjzu2epn/base_de_testes.zip/>. Acesso em: 19 nov.
2017.
______. diegourban.github.io. Blumenau, 2017b. Disponível em:
<https://github.com/diegourban/diegourban.github.io/>. Acesso em: 19 nov. 2017.
WILL PEAVY. Will Peavy. 2017. Disponível em: < https://www.willpeavy.com/minifier/>.
Acesso em: 09 nov. 2017.
WPO STATS. WPO Stats. 2017. Disponível em: <https://wpostats.com/>. Acesso em: 18 mar. 2017.
67 APÊNDICE A – Detalhamentos dos casos de uso
Os quadros Quadro 23 a Quadro 27 apresentam o detalhamento dos casos de uso da API.
Quadro 23 – Detalhamento do caso de uso UC01. Minificar CSS Nome UC01. Minificar CSS
Descrição Este caso de uso tem por objetivo descrever a minificação de arquivo CSS na API.
Ator Cliente
Pré-condições Estar com a API executando Cenário
Principal
1. O Cliente informa o conteúdo do arquivo CSS no corpo da requisição;
2. O Cliente informa o Content-Type: text/css no cabeçalho da requisição;
3. O Cliente envia a requisição para o caminho /api/minify utilizando o método POST;
4. A API devolve o status HTTP 200 e conteúdo minificado no corpo da resposta.
Cenário Alternativo
4a. No passo 4, a API pode devolver o status HTTP 404 caso a requisição seja enviada para um caminho não reconhecido;
4b. No passo 4, a API pode devolver o status HTTP 406 caso o valor no Content-Type do cabeçalho não possuir um valor inválido;
4c. No passo 4, a API pode devolver o status HTTP 500 caso ocorra algum erro no processo de minificação.
Fonte: elaborado pelo autor.
Quadro 24 – Detalhamento do caso de uso UC02. Minificar JavaScript Nome UC02. Minificar JavaScript
Descrição Este caso de uso tem por objetivo descrever a minificação de arquivo JavaScript na API.
Ator Cliente
Pré-condições Estar com a API executando Cenário
Principal
1. O Cliente informa o conteúdo do arquivo JavaScript no corpo da requisição;
2. O Cliente informa o Content-Type: text/javascript no cabeçalho da requisição;
3. O Cliente envia a requisição para o caminho /api/minify utilizando o método POST;
4. A API devolve o status HTTP 200 e conteúdo minificado no corpo da resposta.
Cenário Alternativo
4a. No passo 4, a API pode devolver o status HTTP 404 caso a requisição seja enviada para um caminho não reconhecido;
4b. No passo 4, a API pode devolver o status HTTP 406 caso o valor no Content-Type do cabeçalho não possuir um valor inválido;
4c. No passo 4, a API pode devolver o status HTTP 500 caso ocorra algum erro no processo de minificação.
Fonte: elaborado pelo autor.
68 Quadro 25 – Detalhamento do caso de uso UC03. Minificar HTML
Nome UC03. Minificar HTML
Descrição Este caso de uso tem por objetivo descrever a minificação de arquivo HTML na API.
Ator Cliente
Pré-condições Estar com a API executando Cenário
Principal
1. O Cliente informa o conteúdo do arquivo JavaScript no corpo da requisição;
2. O Cliente informa o Content-Type: text/html no cabeçalho da requisição;
3. O Cliente envia a requisição para o caminho /api/minify utilizando o método POST;
4. A API devolve o status HTTP 200 e conteúdo minificado no corpo da resposta.
Cenário Alternativo
4a. No passo 4, a API pode devolver o status HTTP 404 caso a requisição seja enviada para um caminho não reconhecido;
4b. No passo 4, a API pode devolver o status HTTP 406 caso o valor no Content-Type do cabeçalho não possuir um valor inválido;
4c. No passo 4, a API pode devolver o status HTTP 500 caso ocorra algum erro no processo de minificação.
Fonte: elaborado pelo autor.
Quadro 26 – Detalhamento do caso de uso UC04. Otimizar PNG Nome UC04. Otimizar PNG
Descrição Este caso de uso tem por objetivo descrever a otimização de arquivo PNG na API.
Ator Cliente
Pré-condições Estar com a API executando Cenário
Principal
1. O Cliente informa o conteúdo do arquivo PNG no corpo da requisição;
2. O Cliente informa o Content-Type: image/png no cabeçalho da requisição;
3. O Cliente envia a requisição para o caminho /api/minify utilizando o método POST;
4. A API devolve o status HTTP 200 e conteúdo otimizado no corpo da resposta.
Cenário Alternativo
4a. No passo 4, a API pode devolver o status HTTP 404 caso a requisição seja enviada para um caminho não reconhecido;
4b. No passo 4, a API pode devolver o status HTTP 406 caso o valor no Content-Type do cabeçalho não possuir um valor inválido;
4c. No passo 4, a API pode devolver o status HTTP 500 caso ocorra algum erro no processo de otimização.
Fonte: elaborado pelo autor.
69 Quadro 27 – Detalhamento do caso de uso UC05. Otimizar JPEG
Nome UC05. Otimizar JPEG
Descrição Este caso de uso tem por objetivo descrever a otimização de arquivo JPEG na API.
Ator Cliente
Pré-condições Estar com a API executando Cenário
Principal
1. O Cliente informa o conteúdo do arquivo JPEG no corpo da requisição;
2. O Cliente informa o Content-Type: image/jpeg no cabeçalho da requisição;
3. O Cliente envia a requisição para o caminho /api/minify utilizando o método POST;
4. A API devolve o status HTTP 200 e conteúdo otimizado no corpo da resposta.
Cenário Alternativo
4a. No passo 4, a API pode devolver o status HTTP 404 caso a requisição seja enviada para um caminho não reconhecido;
4b. No passo 4, a API pode devolver o status HTTP 406 caso o valor no Content-Type do cabeçalho não possuir um valor inválido;
4c. No passo 4, a API pode devolver o status HTTP 500 caso ocorra algum erro no processo de otimização.
Fonte: elaborado pelo autor.
70 APÊNDICE B – Código do arquivo MinifyRoute.js
No Quadro 28 é apresentado o código completo do arquivo MinifyRoute.js apresentado parcialmente no Quadro 6 e Quadro 7.
Quadro 28 – Código presente no arquivo MinifyRoute.js
1 const logger = require("winston");
2 const CssRouter = require("../routers/CssRouter");
3 const HtmlRouter = require("../routers/HtmlRouter");
4 const JsRouter = require("../routers/JsRouter");
5 const ImageRouter = require("../routers/ImageRouter");
6 const config = require("../../config/config");
7
8 module.exports = function(app) { 9
10 const API_ENDPOINT = "/api/minify";
11
12 app.post(API_ENDPOINT, function(req, res, next) { 13 logger.info("Recebendo POST");
14
15 if(containsInvalidContent(req)) { 16
21 req.url = rewriteURL(req) + extractQuery(req.url);
22
23 logger.info("Redirecionando a rota para " + req.url);
24
25 next();
26 });
27
28 app.use(API_ENDPOINT, CssRouter);
29 app.use(API_ENDPOINT, HtmlRouter);
30 app.use(API_ENDPOINT, JsRouter);
31 app.use(API_ENDPOINT, ImageRouter);
32
33 function containsInvalidContent(req) { 34 return !(containsCSS(req)
40 function containsCSS(req) { 41
return containsAcceptedContentType(req, config.api.acceptTypes.css);
71
42 } 43
44 function containsJS(req) { 45
return containsAcceptedContentType(req, config.api.acceptTypes.js);
46 } 47
48 function containsHTML(req) { 49
return containsAcceptedContentType(req, config.api.acceptTypes.html);
50 } 51
52 function containsImage(req) {
53
return containsAcceptedContentType(req, config.api.acceptTypes.images.jpeg,
config.api.acceptTypes.images.png);
54 } 55
56 function containsAcceptedContentType(req, ...contentTypes) { 57 return contentTypes.includes(req.get("Content-Type"));
58 }
74 function extractQuery(url) {
75 var pattern = escapeRegExp(API_ENDPOINT) + "\\?(.*)";
76 var matchGroups = new RegExp(pattern).exec(url);
77 if(matchGroups) return "?" + matchGroups[1];
78 return "";
79 } 80
81 function escapeRegExp(stringToGoIntoTheRegex) { 82
return stringToGoIntoTheRegex.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
83 } 84 }
Fonte: elaborado pelo autor.
72 APÊNDICE C – Código dos roteadores utilizados na API
Os quadros Quadro 29 a Quadro 32 apresentam o código completo dos roteadores utilizados na API, apresentados parcialmente no Quadro 8.
Quadro 29 – Código do CssRouter.js
1 const logger = require("winston");
2 const router = require("express").Router()
3 const CssMinifier = require("../minifiers/CssMinifier");
4
5 router.post("/css", function(req, res) { 6 var buffer = "";
7
8 req.on("data", function(chunk) { 9 buffer += chunk;
10 });
11
12 req.on("end", function() {
13 res.setHeader("Content-Type", req.get("Content-Type"));
14
15 CssMinifier.minify(buffer).then(function(output) { 16 res.send(output);
17 })
18 .catch(function(err) { 19
logger.warn("Ocorreu um erro na minificação, tentanto o fallback...");
20 CssMinifier.fallback(buffer).then(function(fallbackOutput) { 21 res.send(fallbackOutput.css);
31 module.exports = router;
Fonte: elaborado pelo autor.
Quadro 30 – Código do JsRouter.js
1 const logger = require("winston");
2 const router = require("express").Router();
3 const JsMinifier = require("../minifiers/JsMinifier");
4
5 router.post("/js", function(req, res) { 6 var buffer = "";
7
8 req.on("data", function(chunk) {
73
9 buffer += chunk;
10 });
11
12 req.on("end", function() { 13 JsMinifier.minify(buffer) 14 .then(function(output) {
15 res.setHeader("Content-Type", req.get("Content-Type"));
16 res.send(output);
25 module.exports = router;
Fonte: elaborado pelo autor.
Quadro 31 – Código do HtmlRouter.js
1 const logger = require("winston");
2 const router = require("express").Router();
3 const HtmlMinifier = require("../minifiers/HtmlMinifier");
4
5 router.post("/html", function(req, res) { 6 var buffer = "";
7
8 req.on("data", function(chunk) { 9 buffer += chunk;
10 });
11
12 req.on("end", function() { 13 HtmlMinifier.minify(buffer) 14 .then(function(output) {
15 res.setHeader("Content-Type", req.get("Content-Type"));
16 res.send(output);
Fonte: elaborado pelo autor.
Quadro 32 – Código do ImageRouter.js
1 const logger = require("winston");
2 const router = require("express").Router();
3 const ImageOptimizer = require("../minifiers/image/ImageOptimizer");
74
4
5 router.post("/image", function(req, res) { 6 var buffers = [];
7
8 req.on("data", function(chunk) { 9 buffers.push(chunk);
10 }) 11
12 req.on("end", function() {
13 var buffer = Buffer.concat(buffers);
14
15 ImageOptimizer.optimize(buffer, req.query) 16 .then(function(output) {
17 res.setHeader("Content-Type", req.get("Content-Type"));
18 res.send(output);
19 })
20 .catch(function(err) {
21 logger.error("Ocorreu um erro na otimização: " + err);
22 res.status(500).send(err);
23 }) 24 });
25 26 });
27 module.exports = router;
Fonte: elaborado pelo autor.
75 APÊNDICE D – Código do arquivo fetch.js e suas dependências
Os quadros Quadro 33 a Quadro 35 apresentam o código completo do arquivo
fetch.js e suas dependências: extensions.js e config.js utilizadas na ferramenta web e apresentado parcialmente no Quadro 15.
Quadro 33 – Código do arquivo fetch.js da ferramenta
1 const fs = require("fs");
2 const path = require("path");
3 const fetch = require("node-fetch");
4 const logger = require("winston");
5
6 const config = require("../../config/config");
7 const extensionutils = require("./extension");
8
9 exports.fetchAPI = function(src, dest, options) { 10 let queryParams = jsonToQueryString(options);
11 12
let apiUrl =
`http://${config.api.ip}:${config.api.port}${config.api.url}${queryParams}`;
13
14 let type = extensionutils.extensionToContentType(path.extname(src));
15 let requestInfo = { 16 method: "POST",
17 headers: {"Content-Type" : type}, 18 body: fs.createReadStream(src) 19 }
20
21 return fetch(apiUrl, requestInfo) 22 .then(response => {
23 response.body.pipe(fs.createWriteStream(dest));
24 })
25 .catch(error => {
26 logger.error("Erro inesperado ao se conectar com a API.\n" + error);
27 return error;
28 });
29 } 30
31 function jsonToQueryString(json) {
32 return '?' + Object.keys(json).map(function(key) {
33 return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]);
34 }).join('&');
35 }
Fonte: elaborado pelo autor.
Quadro 34 – Código do arquivo extensions.js da ferramenta
1 const config = require("../../config/config");
2
3 exports.isValidExtension = function(extension) {
76
4 return config.api.acceptedExtensions.includes(extension);
5 } 6
7 exports.extensionToContentType = function(extension) { 8 if(extension === ".css") {
Quadro 35 – Código do arquivo config.js da ferramenta
1 var config = module.exports 2 config.express = {
3 port: process.env.EXPRESS_PORT || 3001, 4 ip: "localhost"
5 }
6 config.app = {
7 uploadName: "projectFile",
8 acceptedMIMEType: ["application/zip", "application/x-zip-compressed"], 9 uploadsFolder: "/uploads",
10 extractedFolder: "__extracted", 11 optimizedFolder: "__optimized"
12 }
13 config.api = { 14 ip: "localhost", 15 port: "3000",
16 url: "/api/minify",
17 acceptedExtensions: [".css", ".js", ".html", ".png", ".jpg"]
18 }
Fonte: elaborado pelo autor.
77 APÊNDICE E – Dados dos testes na página original e otimizada
As tabelas Tabela 18 e Tabela 19 apresentam os resultados coletados dos testes de carregamento da página da ferramenta web apresentados parcialmente na Tabela 17, enquanto que as tabelas Tabela 20 e Tabela 21 apresentam os resultados coletados dos testes de carregamento da página pessoal, apresentados parcialmente na Tabela 17.
Tabela 18 – Testes de carregamento da página da ferramenta web original Teste Transferred (kB) DOMContentLoad (ms) Load (ms)
1 119,00 1440,00 1890,00
Tabela 19 – Testes de carregamento da página da ferramenta web otimizada Teste Transferred (kB) DOMContentLoad (ms) Load (ms)
1 115,00 1200,00 2340,00
Tabela 20 – Testes de carregamento da página pessoal original Teste Transferred (kB) DOMContentLoad (ms) Load (ms)
1 900,00 788,00 966,00
78 Tabela 21 – Testes de carregamento da página pessoal otimizada
Teste Transferred (kB) DOMContentLoad (ms) Load (ms)
1 625,00 256,00 378,00
2 625,00 242,00 359,00
3 625,00 233,00 351,00
4 625,00 220,00 357,00
5 625,00 245,00 362,00
6 625,00 260,00 380,00
7 625,00 250,00 367,00
8 625,00 240,00 355,00
9 625,00 260,00 368,00
10 625,00 263,00 376,00
Média 625,00 246,90 365,30
Fonte: elaborado pelo autor.
79 ANEXO A – Opções do Babel-Minify
O Quadro 36 apresenta a lista completa de opções que o Babel-Minify utiliza, o plugin responsável e o valor padrão de cada opção, comentados parcialmente na seção 3.3.4.
Quadro 36 – Opções do Babel-Minify
Opção Plugin Valor Padrão
booleans transform-minify-booleans true
builtIns minify-builtins true
consecutiveAdds transform-inline-consecutive-adds true
deadcode minify-dead-code-elimination true
evaluate minify-constant-folding true
flipComparisons minify-flip-comparisons true
guards minify-guarded-expressions true
infinity minify-infinity true
mangle minify-mangle-names true
memberExpressions transform-member-expression-literals true mergeVars transform-merge-sibling-variables true
numericLiterals minify-numeric-literals true
propertyLiterals transform-property-literals true regexpConstructors transform-regexp-constructors true
removeConsole transform-remove-console false
removeDebugger transform-remove-debugger false
removeUndefined transform-remove-undefined true
replace minify-replace true
simplify minify-simplify true
simplifyComparisons transform-simplify-comparison-operators true
typeConstructors minify-type-constructors true
undefinedToVoid transform-undefined-to-void true Fonte: Babel-preset-minify (2017, p. 1).