Minify outil pouvant être exécuté via terminal


35

Je suis à la recherche d'un outil ou un moyen de rapetisser (semblable à Compress mon code et cette question sur la pile) tout le code dans mes .xml, .css, .htmlet les .jsfichiers à travers le terminal de Ubuntu. Je finirai par écrire le processus, mais pour le moment, je voudrais juste trouver quelque chose à tester. Existe-t-il un outil permettant de compresser tous ces formats de fichiers via le terminal?


2
Avez-vous essayé quelque chose comme tar -czvf compressed.tar.gz *.xml *.css *.html *.php?
roadmr

1
Je cherche à compresser le code lui-même. Quelque chose comme CSS Minify
DᴀʀᴛʜVᴀᴅᴇʀ

1
Ensuite, je pense que vous ne demandez pas de compression . Par compression sur des fichiers normaux (non multimédia, tels que musique / vidéos), nous ne considérons généralement que la compression sans perte, mais vous cherchez un moyen de minimiser les espaces (dans lesquels vous perdez ces données). Et parce que minifier est une perte, vous ne pouvez pas décompresser (car ce n'est pas réversible). Pour moi, cela rend "peu clair ce que vous demandez".
gertvdijk

Réponses:


43

Ce n'est pas la meilleure option mais c'est probablement la plus facile. Le compresseur YUI a longtemps été considéré comme le meilleur compresseur pour Javascript et CSS, offrant des améliorations de 20 à 40% par rapport aux autres minifiers.

Depuis, il a été remplacé par de nouveaux projets tels que Uglify.JS (ce que Grunt suggérera probablement), mais il reste assez facile de se lancer et d’être opérationnel dans Ubuntu.

sudo apt-get install yui-compressor

C'est ça. Maintenant, vous pouvez courir yui-compressor myfile.jset il fera sa magie, mais pas aussi bien, ni aussi facilement qu’une pile correctement installée Node / Grunt / Uglify + YUI.


15
Tous ceux qui utilisent js ou css n'utilisent pas node.js ou ne font pas de projets node.js. C'est encore un autre cadre à apprendre et à configurer si vous voulez utiliser Grunt. Oui Grunt est cool. Mais de nos jours, nous avons déjà suffisamment à apprendre avant même de pouvoir commencer à coder. Donc noeud / grunt n'est pas toujours pratique. :) Je vais moi-même essayer votre suggestion de compresseur Yui.
Bill Rosmus

2
@ BillR Je suis en quelque sorte d'accord avec le sentiment, mais bien que je n'ai pas de projet node.js, j'utilise quand même des choses comme lessc et uglify.js car ce sont les meilleurs outils pour le poste . Je n'utilise pas Grunt parce que je l'ai remplacé par mon propre outillage, mais pour le travail réel, je ne me suis jamais empêtré pour éviter Node. Si vous voulez rester dans l'industrie, vous devez suivre les meilleures pratiques.
Oli

Vous faites l'hypothèse que l'utilisation de nœud est la meilleure pratique. Peut-être dans votre monde qui n'est pas le monde de tout le monde.
Bill Rosmus

2
Vous avez cinq ans avec moi mais je ne sais pas ce que vous voulez dire ... Utilisez-vous toujours du code HTML4 statique avec un peu de "DHTML" et des scripts perl CGI? Vous utilisez toujours ASP? Ou avez-vous changé les choses à mesure que de meilleures technologies sont devenues disponibles? Nous avons deux points distincts à ce sujet; ça devient un peu bête. Peu m'importe si vous n'aimez pas le recyclage, mais je tiens à ce que vous more-csssachiez que l'utilisation du package NPM pour réduire votre CSS est plus intrusive que l'utilisation de yui-compressor. Ce n'est pas. C'est juste une autre commande qui fait la même chose mieux.
Oli

1
Notez qu'avec cette installation, vous allez également installer openjkd, une chose que personne ne voudrait dans le système.
vraiment

12

Vous pouvez facilement minifier js avec node et uglify-js en ligne de commande:

  • installer uglify-js avec npm install uglify-js -g

  • exécuter uglifyjs app-test.js > app-test.min.js


Pour css, je suggérerais un
exemple d'utilisation de clean-css (probablement le minifier CSS le plus stable sur npm) :

cleancss -o public-min.css public.css

En ce qui concerne html, la minification ne vaut généralement pas le temps que vous investissez dans son installation, mais j’ai essayé html-minifier et c’est un outil formidable.

Quoi que vous fassiez, assurez-vous de gzip ce que vous servez.


1
uglify peut être directement installé avecsudo apt-get install node-uglify
Gery

Notez que uglify-js est uniquement destiné à Javascript, et non aux fichiers css ou autres.
Jose Gómez

2
@Gery si vous voulez installer uglifyavec aptvous devez également installer node-legacy, alors exécutezsudo apt install node-uglify node-legacy
mxdsp

Notez que l' cleancssoutil CLI est maintenant dans le clean-css-clipackage.
JBG

7

Utilisez minify - contrairement aux autres suggestions, cet outil réduit beaucoup plus de types de fichiers:

CSS     text/css
HTM     text/html
HTML    text/html
JS      text/javascript
JSON    application/json
SVG     image/svg+xml
XML     text/xml

Il fait un très mauvais travail avec javascript.
Federico

2

Il n'y a aucune raison de réduire au minimum les fichiers php (sauf que vous avez très peu d'espace disque et que vous voulez en utiliser tout le contenu).

Si vous pouviez ajouter un objectif (que voulez-vous accomplir et pourquoi?), Quelqu'un pourrait vous montrer un meilleur moyen.

Les fichiers JS et CSS sont minifiés au moment de l'exécution et mis en cache dans la plupart des projets Web. Il y a minify ( https://github.com/mrclay/minify ), une "bibliothèque" php qui est capable de faire exactement cela. (peut également être exécuté avec php depuis le terminal)

Mais gardez à l'esprit qu'un gros fichier javascript ne nécessite pas un chargement plus rapide que 5 petits fichiers. Si vous avez besoin d'une raison et d'une solution pour cette déclaration, consultez http://headjs.com/

Que la source soit avec toi ...


1

Je recommanderais d'utiliser Grunt.js . C'est un outil d'automatisation qui propose des miniformes sous forme de plug-ins et peut être exécuté dans votre terminal via Node.js. Il ne devrait pas être nécessaire de réduire au minimum PHP car le code s’exécute côté serveur et seule sa sortie HTML est envoyée au client.

Vous pouvez trouver les plugins disponibles ici


2
Sachez que choisir Grunt implique une courbe d'apprentissage.
Rick-777

1

J'ai eu de bons résultats avec Closure Compiler .

Le compilateur Closure est un outil permettant de télécharger et d’exécuter JavaScript plus rapidement. Au lieu de compiler du langage source en code machine, il compile à partir de JavaScript pour améliorer JavaScript. Il analyse votre JavaScript, l’analyse, supprime le code mort, réécrit et minimise ce qui reste. Il vérifie également la syntaxe, les références de variable et les types, et met en garde contre les pièges JavaScript courants.

Il a été développé par Google et écrit en Java. Il est packagé pour les systèmes basés sur Debian en tant queclosure-compiler et s'installe facilement sur les systèmes Ubuntu. Comme il n’utilise pas d’interface graphique, il nécessite un default-jre-headlesspaquet plus léger .

Il est plus lent que le compresseur YUI mais la taille du fichier résultant est (légèrement) plus petite. Il affiche également des messages d’avertissement utiles, similaires aux compilateurs d’autres langages de programmation.

Documentation: Mise en route

Usage:

closure-compiler --js input.js --js_output_file output.js

La fermeture est vraiment bien si vous démarrez votre projet avec celui-ci et que vous étendez vos objets dans des fichiers séparés, etc. Mais pour un projet existant, c'est plutôt terrible.
Alexis Wilke

-1

Une autre option consiste à utiliser la npxcommande de Node.js. npxexécute une commande d'un package Node.js sans l'installer explicitement.

# Minify JS
npx -p uglify-js uglifyjs -o app.min.js app.js common.js

# Minify CSS
npx clean-css-cli -o style.min.css css/bootstrap.css style.css

# Minify HTML
npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace

# XML
npx pretty-data-cli --type xml --minify input.xml > input.min.xml
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.