2009-08-31 2 views
9

Кто-нибудь знает, как можно автоматически запускать определенные типы файлов с помощью сценария обработки при загрузке? Я пытаюсь выполнить автоматическое минитирование CSS и Javascript, когда я загружаю их на сервер, сохраняя хорошую, удобочитаемую версию на локальной стороне, сохраняя на сервере миниатюрный. В настоящее время я использую WinSCP в Windows, который в некоторой степени доступен для скриптинга, но может быть недостаточно для сценариев. Мне, вероятно, понадобится какое-то мощное решение, поэтому не бойтесь предлагать что-то с клейкой лентой; тем не менее, мне нужно сделать мини-код на моем локальном компьютере и загрузить скрипучий файл, так как я использую общий хостинг и не могу установить нежелательный файл на сервере.Automagically Minify CSS и Javascript on Upload

Спасибо.

+3

Cygwin + scp + shell script. –

+0

Кстати, голосуя ответ, потому что это неправильно, это то, что вы должны делать. Голосование на вопрос, потому что вы не любите плакат, злонамерен и груб. –

+0

Я думаю, что тон вашего комментария к ответу jon и тот факт, что вы использовали CAPS, были более злобными, чем опрос вашего вопроса. – redsquare

ответ

6

Я рекомендую создать Makefile, чтобы решить эту конкретную проблему, вот быстрый и грязный Makefile, я использую для сайта шахты:

PUBDIR=../../static/js/ 
OUTDIR=./build/ 
COMPRESSOR=../yui/build/yuicompressor-2.4.2.jar 
ARGS= 
VPATH=${OUTDIR} 
INST_TARGETS=${OUTDIR}jgblue.js 

jgblue.js: combined.js 
    java -jar ${COMPRESSOR} ${ARGS} ${OUTDIR}$< -o ${OUTDIR}[email protected] 

combined.js: main.js listview.js tabs.js 
    cat $^ > ${OUTDIR}[email protected] 

.PHONY: install 

install: 
    cp ${INST_TARGETS} ${PUBDIR} 

Тогда все, что вы должны ввести это:

make && make install 

Сначала он берет все ваши файлы разработки и объединяет их в один файл, а затем конкатенированный файл сжимается и копируется в ваш общий каталог. Я использую YUICompressor для сжатия, он работает достаточно хорошо.

+0

Хот-дог. Это, возможно, стоит потратить на Cygwin. –

+0

Что я закончил делать (так как я нахожусь в Windows) пишет сценарий Powershell, который следит за каталогом изменений с помощью оснастки PSEventing, а затем запускает его через соответствующий мини-ключ в зависимости от расширения файла. –

5

Поскольку вы используете общий хостинг, я просто предлагаю использовать YUICompressor и запускать файлы css/js через него перед их загрузкой. Не забудьте потерять исходные файлы - это может быть болью, вносящей будущие изменения.

Вы также можете разместить сценарий на своем сервере, который будет периодически перезаписывать ваши файлы css/js, передавая их через minify-process и вручную вызывать этот скрипт после выполнения загрузки.

+0

Задать вопрос. Я попросил способ сделать это при загрузке. Я знаю, ЧТО использовать, мне просто нужно знать, есть ли хороший способ его автоматизировать. –

+0

Я прочитал ваш вопрос. И я дал вам то, что я считаю лучшей альтернативой, так как я не думаю, что у вас есть возможность сделать это автоматически при загрузке. – Sampson

+0

Ну, может быть, кто-то еще узнает. Вот почему я спросил в первую очередь. –

5

Ну, чтобы минимизировать CSS, это всего лишь несколько регулярных выражений.

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

И упаковщик Javascript Дин Эдвардс был перенесен на PHP, Perl, .NET and WSH, так что если вы используете какой-либо из этих технологий, вы могли бы на самом деле есть он работает на вашем собственном сервере. ... Не забудьте кешировать результаты!

+0

По-видимому, OP сбивает нас с толку, чтобы не сказать ему, как это сделать автоматически при загрузке.Поскольку я думаю, что вы предложили правильное решение, я компенсирую его downvote с помощью upvote. – Sampson

+3

Как я смею отвечать на нижестоящие ответы, которые не отвечают на мой вопрос! –

+11

@Jarett Иногда наши вопросы лучше всего отвечают альтернативами. – Sampson

2

Мне нравится Minify. Он поддерживает сжатие и обрезку html, javascript и css на лету.

Это довольно гибкий инструмент, который можно интегрировать в существующие приложения.

Некоторые из них продвинутые функции сочетает в себе несколько файлов javascript в одном, то же самое для css. Он имеет несколько способов определения, какие файлы объединяются, что полезно для целей тестирования. Таким образом, вам не нужно изменять настройки каждый раз.

+0

Это может быть хорошо. Это кажется более глупым, чем решение, о котором я думал. –

+0

Это действительно надежная защита. Я добавил дополнительную информацию. – Dykam

1

Я предлагаю сжать (на каком-то автоматическом пути) на вашей машине разработки и протестировать ее там перед загрузкой на ваш сервер. Основополагающее изменение JavaScript в качестве последнего этапа процесса развертывания является очевидным риском для внесения ошибок.

+0

Это одна из причин, по которой я хочу, чтобы она автоматически минимизировалась при загрузке: поэтому я всегда тестирую, какой будет фактический файл. –

1

Настоящий прохладный раствор whice делает обслуживание js и css автоматическим, как сон.

Проверил: http://code.google.com/p/minify/

Особенность

  • комбайнов и minifies множественного CSS или файлы JavaScript в один скачать
    • использует улучшенный порт JSMin библиотеки и пользовательские классы Дугласа Крокфорда к Минимизировать CSS и HTML
    • Кэш-сервер (файлы/apc/memcache), чтобы избежать ненужной работы
    • Реагирует с HTTP 304 (Not Modified) ответ, когда браузер имеет последнюю дату копию кэша
    • Большинство модулей ленивы загруженный по мере необходимости (304 ответов использовать минимальный код)
    • Автоматически переписывают относительные URI, в объединенные файлы CSS, чтобы указать на допустимые местоположения.
    • С включенным кэшированием Minify способен обрабатывать сотни запросов в секунду на умеренно мощном сервере.
    • Контент-кодирование: gzip, на основе заголовков запросов. Кэширование позволяет использовать файлы gzipped быстрее, чем опция mod_deflate от Apache!
    • Тестовые для большинства компонентов
    • Простой интеграции третьих сторон minifiers
    • Отдельных классов утилита для кодирования HTTP и управления кэшем enter code here
2

Я просто написал этот minfier скрипт в Python. Как и решение Bills, он использует компрессор YUI, но будет работать в безрезультатной среде. Предполагается, что файлы raw (unminifie) будут находиться в/some/path/src /, а миниатюрные версии должны войти в/some/path /. Он также предполагает, что файл yuicompressor банка находится в текущей папке:

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

Там есть еще легче решение для обоих (JS и CSS), так что вы можете «Минимизировать на лету». Вы должны легко переносить его на любой язык (в настоящее время он находится на PHP). Это действительно фрагмент и неотъемлемая часть PHP Fat-Free Framework. Следуйте по этой ссылке и посмотрите мой код. Это всего лишь одна функция. Не смотрите на звонки и свистки, такие как объединение файлов, кодирование base-X, сокращение переменных или даже кодирование gzip (хотя это можно легко добавить).

Fat-Free Minify

Смежные вопросы