• Nenhum resultado encontrado

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).

Documentos relacionados