10
votes

Minifiez automatiquement CSS et JavaScript sur le téléchargement

Quelqu'un peut-il connaître un bon moyen d'exécuter automatiquement certains types de fichiers via un script de traitement sur le téléchargement? J'essaie d'accomplir automatiquement une minification de CSS et JavaScript automatiquement lorsque je les télécharge sur le serveur, en gardant une version agréable et lisible par l'homme du côté local tout en conservant une minifiée sur le serveur. J'utilise actuellement WINSCP sur Windows, qui est script dans une certaine mesure mais pourrait ne pas être suffisamment script. J'aurais probablement besoin d'une sorte de solution de pavée, alors n'ayez pas peur de suggérer quelque chose avec du ruban adhésif de conduit; Cependant, je dois faire la minécution sur mon ordinateur local et télécharger le fichier schéré, car j'utilise l'hébergement partagé et ne peut pas installer de jumel sur le serveur.

merci.


3 commentaires

Au fait, voter une réponse parce que c'est faux, c'est ce que vous êtes censé faire. Voter une question parce que vous n'aimez pas l'affiche est malveillante et inconnue.


Je pense que le ton de votre commentaire à la réponse de Jon et le fait que vous avez utilisé Caps était plus malveillant que la descente de votre question.


Capitaliser un mot pour souligner qu'il n'est guère impoli. Si je suis sorti comme dur, ce n'était pas intentionnel.


8 Réponses :


5
votes

Depuis que vous êtes sur l'hébergement partagé, je suggère simplement d'utiliser le Yuicompressor et exécutez vos fichiers CSS / JS à travers elle avant de les télécharger. Assurez-vous de ne pas perdre vos fichiers d'origine - cela pourrait être une douleur à faire des changements futurs.

Vous pouvez également placer un script sur votre serveur qui réécrireait périodiquement vos fichiers CSS / JS, ce qui les transmettrait à PROI-MINIFY-TRAITE et appelez manuellement ce script après avoir effectué un téléchargement.


4 commentaires

Lisez la question. J'ai demandé un moyen de le faire sur le téléchargement. Je sais quoi utiliser, j'ai juste besoin de savoir s'il y a un bon moyen de l'automatiser.


J'ai lu votre question. Et je vous ai donné ce que je pensais être la meilleure alternative, car je ne pense pas que vous ayez une option pour le faire automatiquement sur le téléchargement.


Eh bien, peut-être que quelqu'un d'autre sache. C'est pourquoi j'ai demandé en premier lieu.


L'attitude suce un peu ici jarrett



7
votes

Eh bien, pour miniser CSS n'est que quelques regextes.

// (PHP) but should be easily portable to any language
function compressCSS($css) {
    return
        preg_replace(
            array('@\s\s+@','@(\w+:)\s*([\w\s,#]+;?)@'),
            array(' ','$1$2'),
            str_replace(
                array("\r","\n","\t",' {','} ',';}'),
                array('','','','{','}','}'),
                preg_replace('@/\*[^*]*\*+([^/][^*]*\*+)*/@', '', $css)
            )
        )
    ;
}


4 commentaires

Apparemment, l'OP nous baisse pour ne pas lui dire comment le faire automatiquement sur le téléchargement. Depuis que je pense que vous avez offert une solution valide, je compenserai son bowvote avec un uppote.


@Jarett Parfois, nos questions sont mieux répondues avec des alternatives.


Pas lorsque la réponse manque totalement le point de la question. Si j'avais demandé le meilleur miniérateur, ma question aurait été clôturée immédiatement comme une duplicata.


Eh bien, mon argument était que vous pouviez l'exécuter sur votre serveur ... combien de plus automagieux voulez-vous?



2
votes

J'aime Minify . Il prend en charge la compression et la coupe HTML, JavaScript et CSS à la volée.

Il est assez flexible, un peut être intégré aux applications existantes.

Certains des fonctionnalités les plus avancées combinent plusieurs fichiers JavaScript en un, identique pour CSS. Il a plusieurs façons de définir les fichiers à combiner, ce qui est utile à des fins de test. De cette façon, vous ne devez pas modifier les paramètres à chaque fois.


2 commentaires

Cela pourrait être bon. Cela semble plus stupide que la solution que je pensais.


C'est vraiment infaillible. J'ai ajouté plus d'informations.



7
votes

Je recommande de créer un maquette pour résoudre ce problème particulier, voici un matrice rapide et sale que j'utilise pour un site de mine: xxx pré>

alors tout ce que vous devez taper est:

make && make install


2 commentaires

Hot-dog. Cela pourrait valoir la peine de se glisser avec Cygwin.


Ce que j'ai fini par faire (puisque je suis sur Windows), écrit un script PowerShell qui regarde le répertoire des modifications avec le logiciel enfichable PSEventting, puis l'exécute via le minificateur approprié en fonction de l'extension de fichier.



1
votes

Je suggère de compresser (par tous les moyens d'une manière automatisée) sur votre machine de développement et de le tester avant de télécharger sur votre serveur Live. Changement fondamentalement de votre JavaScript à mesure que la dernière étape de votre processus de déploiement est un risque évident d'introduction d'erreurs.


1 commentaires

C'est une raison pour laquelle je veux que cela soit automatiquement minifiée sur le téléchargement: je suis donc testant toujours avec quel sera le fichier de production réel.



1
votes

solution vraiment cool echice fait servir des JS et CSS comme un rêve.

Vérifier: http://code.google.com/p/minify/

Caractéristiques

  • combine et miniifie plusieurs fichiers CSS ou JavaScript en un seul téléchargement
    • utilise un port amélioré de la bibliothèque JSmin de Douglas Crockford et des classes personnalisées pour minifier CSS et HTML
    • CACHES Server-côté (fichiers / APC / MemCache) pour éviter de faire des travaux inutiles
    • répond avec une réponse HTTP 304 (non modifiée) lorsque le navigateur a une copie de cache à jour
    • La plupart des modules sont chargés de paresseux au besoin (les réponses 304 utilisent un code minimal)
    • réécrit automatiquement les URIS relatives dans les fichiers CSS combinés pour pointer vers des emplacements valides
    • avec la mise en cache activée, Minify est capable de gérer des centaines de demandes par seconde sur un serveur modérément puissant.
    • Content-coding: GZIP, basé sur les en-têtes de demande. La mise en cache permet ainsi de servir des fichiers gzippés plus rapidement que l'option mod_deflate d'Apache!
    • Cas de test pour la plupart des composants
    • Intégration facile des minificateurs tiers
    • Séparez les classes utilitaires pour l'encodage HTTP et le contrôle de cache Entrez le code ici

0 commentaires

2
votes

Je viens d'écrire ce script de Minfier à Python. Comme la solution de factures, il utilise le compresseur YUI, mais fonctionnera dans un environnement important. Il suppose que les fichiers RAW (MODINIFIE) seront dans / certains / chemin / SRC / SRC /, et que les versions minifiantes devraient entrer dans / certains / chemin /. Il suppose également que le fichier JAR Yuicompressor est dans le dossier actuel:

import os, glob
from subprocess import Popen,PIPE

def RunCommand( cmd, show_output  ):
    p = Popen(cmd, shell=True,stdout=PIPE,stderr=PIPE)
    for line in p.stdout:
        if show_output:
            print line


    outerr = "\n".join(p.stderr.readlines() )   

    if len(outerr) > 0:
        print "ERROR: " + outerr
        sys.exit()

    code = p.wait()         
    if ( code > 0 ):
        print ("ERROR CODE: %i" % code )
        sys.exit()



compresser = "yuicompressor-2.4.2.jar"
dirs = [ "../wwwroot/css/", "../wwwroot/JavaScript/"]

extensions = ["*.js", "*.css" ]

for dir in dirs:
    src = dir + "/src/"
    for ext in extensions:      
        for path in glob.glob( os.path.join( src, ext)):
            file = os.path.basename(path)
            src_file = os.path.normpath( src + "/" +  file )
            dest_file = os.path.normpath( dir + "/" + file )
            if not os.path.isfile(dest_file) or os.path.getmtime(src_file) > os.path.getmtime(dest_file):
                print "minifying %s..." % (dest_file) 
                command = "java -jar %s %s -o %s" % ( compresser, src_file, dest_file )
                RunCommand(command, True)


0 commentaires

0
votes

Il y a une solution encore plus claire pour les deux (JS et CSS) afin que vous puissiez "minifier à la volée". Vous devriez être capable de le porter facilement à n'importe quelle langue (il est actuellement en PHP). C'est vraiment un fragment et une partie intégrante du cadre sans gras PHP. Suivez ce lien et regardez mon code. C'est juste une seule fonction. Ne cherchez pas des cloches et des sifflets comme la combinaison de fichiers, codage de base-x, raccourcissement des variables ou même codage gzip (bien que cela puisse être ajouté facilement).

Minify sans gras


0 commentaires