Comment «sauter» des fichiers JavaScript minifiés lors d’une recherche dans une arborescence de fichiers js?

Je recherche fréquemment un grand arbre js pour certains jetons. Considérez que vous cherchiez tous les jetons “.prototype” dans vos fichiers js. Je ferais quelque chose comme ça:

find . -name "*.js" |xargs grep "\.prototype" 

De façon grossière, cela produit un chargement de hits sur des librairies miniatures. Obscurcir les vrais résultats que je suis après. c’est à dire:

 this.animate(b,a,c,d)}}),p.speed=function(a,b,c) {var d=a&&typeof a=="object"?p.extend({},a{com plete:c||!c&&b||p.isFunction(a)&&a,duration:a,eas ing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.of f?0:typeof d.duration=="number"?d.duration:d.durat ion in p.fx.speedsp.fx.speeds[d.duration]:p.fx.speeds._defa ult;if(d.queue==null||d.queue===!0)d.queue="fx";return 

des résultats comme celui-ci.

Alors, comment puis-je détecter et “sauter” les bibliothèques minifiées?

Remarque: je stocke généralement les versions minifiées et non minifiées des librairies de sorte que j’obtiens les hits dans les librairies que je recherche.

Y at-il une utilité là-bas qui le fait?

La solution pas si parfaite : je viens d’écrire un petit script bash pour le faire. Ce script laisse de côté certains cas en coin. Cependant, cela fonctionne dans mon environnement, et j’ai pas mal de bibliothèques de fournisseurs miniatures que je ne veux pas trébucher.

 #!/bin/bash my_magic_number=300 for fname in `find . -name "*.js"`; do # Test the file to see if the last line is longer than... 300 character_count=$(tail -1 $fname |wc -m) if [ $character_count -gt $my_magic_number ]; then #echo " --> compressed: $fname" : else grep --with-filename $1 $fname fi done 
  • Mettez cela dans un fichier texte jsgrep
  • chmod 755 le fichier
  • Déposez-le sur votre chemin.

Wala:

 $ cd /home/user/workspace/path/with/js/ $ jsgrep "\.prototype" 

Vous obtenez maintenant une sortie sensible:

 ./vendor/json2.js: Ssortingng.prototype.toJSON = ./vendor/json2.js: Number.prototype.toJSON = ./vendor/bootstrap.js: Modal.prototype.escape = function () { ./vendor/bootstrap.js: Modal.prototype.removeBackdrop = function () { ./vendor/bootstrap.js: Modal.prototype.backdrop = function (callback) { ./vendor/backbone-1.0.0.js: if (protoProps) _.extend(child.prototype, protoProps); ./vendor/backbone-1.0.0.js: child.__super__ = parent.prototype; ./vendor/backbone.localStorage.js:_.extend(Backbone.LocalStorage.prototype, { ./vendor/underscore.js: var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; 

Y a-t-il un utilitaire pour faire cela?

Peut être.

Si les versions minifiées s’appellent commodément * .min.js (comme c’est typique), vous pouvez simplement trouver uniquement ces fichiers.

Je pense que vérifier les espaces dans le fichier est encore plus fragile étant donné qu’il est facile de le casser si le fichier contient une chaîne telle que " " , ou même simplement un message d’erreur ou une autre chaîne de sortie.

Cela me permet donc de me rapprocher d’une solution:

 $ find . -name "*.js" -not -name "*.min.js" -not -name "*min.js" -not -name "*built*.js"| xargs grep "\.prototype" |less 

J’envisage toujours une solution où vous tapez:

  ".prototype" 

findjstok est la magie que je recherche dans la nature.

Je sais que c’est une vieille question, mais la solution la plus simple de la page de recherche est

 find . \! -name "*.min.js" -print