Como minimizar CSS e Javascript via linha de comando
Todo bom desenvolvedor web tem a preocupação de minimizar seus arquivos CSS e Javascript a fim de otimizar a renderização de suas páginas. Neste artigo veremos como fazer isso no GNU/Linux via linha de comando.
[ Hits: 9.779 ]
Por: Fábio Berbert de Paula em 15/04/2015 | Blog: https://fabio.automatizando.dev
#!/usr/bin/perl my $source = shift; if (! -f $source) { print "Use: $0 <input-file>\n\n"; } use JavaScript::Minifier qw(minify); open(INFILE, $source) or die; print minify(input => *INFILE); close(INFILE);
/* app.js original */ /* * Template Name: Unify - Responsive Bootstrap Template * Description: Business, Corporate, Portfolio, E-commerce and Blog Theme. * Version: 1.6 * Author: @htmlstream * Website: http://htmlstream.com */ var App = function () { //Bootstrap Tooltips and Popovers function handleBootstrap() { /*Bootstrap Carousel*/ jQuery('.carousel').carousel({ interval: 15000, pause: 'hover' }); /*Tooltips*/ jQuery('.tooltips').tooltip(); jQuery('.tooltips-show').tooltip('show'); jQuery('.tooltips-hide').tooltip('hide'); jQuery('.tooltips-toggle').tooltip('toggle'); jQuery('.tooltips-destroy').tooltip('destroy'); /*Popovers*/ jQuery('.popovers').popover(); jQuery('.popovers-show').popover('show'); jQuery('.popovers-hide').popover('hide'); jQuery('.popovers-toggle').popover('toggle'); jQuery('.popovers-destroy').popover('destroy'); } //Search Box (Header) function handleSearch() { jQuery('.search').click(function () { if(jQuery('.search-btn').hasClass('fa-search')){ jQuery('.search-open').fadeIn(500); jQuery('.search-btn').removeClass('fa-search'); jQuery('.search-btn').addClass('fa-times'); } else { jQuery('.search-open').fadeOut(500); jQuery('.search-btn').addClass('fa-search'); jQuery('.search-btn').removeClass('fa-times'); } }); } //Sidebar Navigation Toggle function handleToggle() { jQuery('.list-toggle').on('click', function() { jQuery(this).toggleClass('active'); }); /* jQuery('#serviceList').on('shown.bs.collapse'), function() { jQuery(".servicedrop").addClass('glyphicon-chevron-up').removeClass('glyphicon-chevron-down'); } jQuery('#serviceList').on('hidden.bs.collapse'), function() { jQuery(".servicedrop").addClass('glyphicon-chevron-down').removeClass('glyphicon-chevron-up'); } */ } //Fixed Header function handleHeader() { jQuery(window).scroll(function() { if (jQuery(window).scrollTop()>100){ jQuery(".header-fixed .header-sticky").addClass("header-fixed-shrink"); } else { jQuery(".header-fixed .header-sticky").removeClass("header-fixed-shrink"); } }); } //Header Mega Menu function handleMegaMenu() { jQuery(document).on('click', '.mega-menu .dropdown-menu', function(e) { e.stopPropagation() }) } return { init: function () { handleBootstrap(); handleSearch(); handleToggle(); handleHeader(); handleMegaMenu(); }, //Clients Logo initSliders: function () { jQuery('#clients-flexslider').flexslider({ animation: "slide", easing: "swing", animationLoop: true, itemWidth: 1, itemMargin: 1, minItems: 2, maxItems: 9, controlNav: false, directionNav: false, move: 2 }); jQuery('#clients-flexslider1').flexslider({ animation: "slide", easing: "swing", animationLoop: true, itemWidth: 1, itemMargin: 1, minItems: 2, maxItems: 5, controlNav: false, directionNav: false, move: 2 }); jQuery('#photo-flexslider').flexslider({ animation: "slide", controlNav: false, animationLoop: false, itemWidth: 80, itemMargin: 0 }); jQuery('#testimonal_carousel').collapse({ toggle: false }); }, //Counters initCounter: function () { jQuery('.counter').counterUp({ delay: 10, time: 1000 }); }, //Parallax Backgrounds initParallaxBg: function () { jQuery(window).load(function() { jQuery('.parallaxBg').parallax("50%", 0.2); jQuery('.parallaxBg1').parallax("50%", 0.4); }); }, }; }();
/* app-min.js */ var App=function(){function handleBootstrap(){jQuery('.carousel').carousel({interval:15000,pause:'hover'});jQuery('.tooltips').tooltip();jQuery('.tooltips-show').tooltip('show');jQuery('.tooltips-hide').tooltip('hide');jQuery('.tooltips-toggle').tooltip('toggle');jQuery('.tooltips-destroy').tooltip('destroy');jQuery('.popovers').popover();jQuery('.popovers-show').popover('show');jQuery('.popovers-hide').popover('hide');jQuery('.popovers-toggle').popover('toggle');jQuery('.popovers-destroy').popover('destroy');} function handleSearch(){jQuery('.search').click(function(){if(jQuery('.search-btn').hasClass('fa-search')){jQuery('.search-open').fadeIn(500);jQuery('.search-btn').removeClass('fa-search');jQuery('.search-btn').addClass('fa-times');}else{jQuery('.search-open').fadeOut(500);jQuery('.search-btn').addClass('fa-search');jQuery('.search-btn').removeClass('fa-times');}});} function handleToggle(){jQuery('.list-toggle').on('click',function(){jQuery(this).toggleClass('active');});} function handleHeader(){jQuery(window).scroll(function(){if(jQuery(window).scrollTop()>100){jQuery(".header-fixed .header-sticky").addClass("header-fixed-shrink");} else{jQuery(".header-fixed .header-sticky").removeClass("header-fixed-shrink");}});} function handleMegaMenu(){jQuery(document).on('click','.mega-menu .dropdown-menu',function(e){e.stopPropagation()})} return{init:function(){handleBootstrap();handleSearch();handleToggle();handleHeader();handleMegaMenu();},initSliders:function(){jQuery('#clients-flexslider').flexslider({animation:"slide",easing:"swing",animationLoop:true,itemWidth:1,itemMargin:1,minItems:2,maxItems:9,controlNav:false,directionNav:false,move:2});jQuery('#clients-flexslider1').flexslider({animation:"slide",easing:"swing",animationLoop:true,itemWidth:1,itemMargin:1,minItems:2,maxItems:5,controlNav:false,directionNav:false,move:2});jQuery('#photo-flexslider').flexslider({animation:"slide",controlNav:false,animationLoop:false,itemWidth:80,itemMargin:0});jQuery('#testimonal_carousel').collapse({toggle:false});},initCounter:function(){jQuery('.counter').counterUp({delay:10,time:1000});},initParallaxBg:function(){jQuery(window).load(function(){jQuery('.parallaxBg').parallax("50%",0.2);jQuery('.parallaxBg1').parallax("50%",0.4);});},};}();
Organizando projetos com a classe FastTemplate (parte 1)
A função DATE_FORMAT() do MySQL
Como criar um clicador de sites com NodeJS
Liberte-se: Crie um Servidor Proxy na Nuvem para Acessar Conteúdos Bloqueados
RedBug: Lista dos autores de artigos sorteados do mês
Listar dados em MySQL utilizando PHP e AJAX (parte 1)
Banda Larga é um direito de todos!
Google Maps API - Criando e interagindo com seus próprios mapas
Novo tipo de vírus pode afetar tanto Windows quanto Linux
ExtJS: Um excelente framework de JavaScript
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta