2009-08-31 13 views
9

アップロード時に処理スクリプトを使用して特定のファイルタイプを自動的に実行する良い方法を知っている人はいますか?私は自動的にCSSとJavascriptをサーバーにアップロードして、ローカル側に見やすい人が読めるバージョンを維持しながら、サーバー上に小型化したものを保ちながら自動的にミニマム化するようにしています。私は現在Windows上でWinSCPを使用していますが、これはある程度はスクリプト化可能ですが、十分にスクリプト化できないかもしれません。私はおそらく何らかの種類の石畳の解決策を必要とします。だからダクトテープで何かを示唆するのを恐れないでください。しかし、私は共有ホスティングを使用しており、サーバに迷惑メールをインストールすることができないので、私は自分のローカルコンピュータで縮小化を行い、squakedファイルをアップロードする必要があります。アップロード時にCSSとJavascriptを自動的に小さくする

ありがとうございました。

+3

Cygwin + scp + shellスクリプト。 –

+0

ところで、答えが間違っているために投票するのは、あなたがしなければならないことです。あなたが嫌い​​なので、質問を投票するのは、悪意のある、まったくないポスターです。 –

+0

私はあなたのコメントのトーンはジョンの答えと思うし、あなたがCAPSを使用したという事実はあなたの質問のdownvotingよりも悪意を持っていた。 – redsquare

答えて

6

が、ここで私は私のサイトのために使用しています迅速かつ汚いメイクです:

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 

まず、すべての開発ファイルを1つのファイルに連結し、連結したファイルを圧縮してパブリックディレクトリにコピーします。私は圧縮のためにYUICompressorを使用しています、それはかなりうまく動作します。

+0

ホットドッグ。それはCygwinのためにぴったりの価値があるかもしれません。 –

+0

私がやったことは(Windows上にいるので)PSEventingスナップインでディレクトリの変更を監視するPowershellスクリプトを作成してから、ファイル拡張子に応じて適切なminifierを実行します。 –

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は彼にアップロード時に自動的に行う方法を教えてくれないので、私たちにdownvotingしています。私はあなたが有効な解決策を提供したと思うので、アップフォートで彼のダウンフォートを相殺します。 – Sampson

+3

私は私の質問に答えることができない答えをあえてどのようにdownvote! –

+11

@Jarett時には私たちの質問は、代替案で最もよく答えられます。 – Sampson

2

Minifyが好きです。これは、HTMLやJavaScript、CSSの圧縮とトリミングをオンザフライでサポートしています。

非常に柔軟性があり、既存のアプリに統合することができます。

アドバンスの機能の中には、複数のJavaScriptファイルを1つにまとめたものがあります.CSSでも同じです。結合するファイルを複数の方法で定義することができます。これはテスト目的で便利です。この方法では、毎回設定を変更する必要はありません。私は、この特定の問題を解決するために、メイクファイルを作成することをお勧めし

+0

これは良いかもしれません。私が考えていた解決策よりも馬鹿だと思われます。 –

+0

それは本当に絶対確実です。私は詳細を追加しました。 – Dykam

1

ライブマシンにアップロードする前に、自分の開発マシンで(ある意味自動化された方法で)圧縮してテストすることをお勧めします。デプロイメントプロセスの最終段階でJavaScriptを根本的に変更することは、エラーを招く可能性のある明らかなリスクです。

+0

アップロード時に自動的にサイズを縮小したい理由の1つです。そのため、実際のプロダクションファイルとなるものを常にテストしています。 –

1

クールなソリューションは、自動的に夢のように役立つjsとcssを提供します。

チェック:http://code.google.com/p/minify/

特長

  • 組み合わせ、minifies複数のCSSやJavaScriptファイル1回のダウンロードに
    • はCSSを縮小化するためにダグラス・クロックフォードのJSMinライブラリとカスタムクラスの強化されたポートを使用しますおよびHTML
    • 不必要な作業を避けるためにサーバー側(files/apc/memcache)のキャッシュ
    • HTTP 304(未修正)応答で
    • で応答ブラウザは最新のキャッシュコピーを持っているときに、必要に応じ
    • ほとんどのモジュールがレイジーロードされている(304個の応答が最小限のコードを使用します)
    • 自動的に相対URIを書き換え有効な場所を指すようにCSSファイルを結合
    • キャッシングを有効にすると、Minifyは中程度に強力なサーバーで毎秒何百もの要求を処理できます。
    • Content-Encoding:要求ヘッダーに基づくgzip。キャッシングにより、gzipされたファイルをApacheのmod_deflateオプションより速く処理できます!ほとんどのコンポーネントのための
    • テストケースサードパーティのminifiers HTTPのエンコードとenter code here
2

キャッシュ制御私はpythonでこのminfierスクリプトを書いたため

  • 別のユーティリティクラスの
  • 簡単に統合。 Billsソリューションと同様、YUIコンプレッサーを使用しますが、無駄のない環境でも動作します。生の(無制限の)ファイルは/ some/path/src /にあり、縮小されたバージョンは/ some/path /になければならないと仮定します。また、yuicompressorのjarファイルが現在のフォルダにあることを前提としています

    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の断片であり、不可欠な部分です。このリンクに従って、私のコードを見てください。単なる関数です。ファイルの結合、ベースXエンコーディング、変数の短縮、さらにはgzipエンコーディング(これは簡単に追加することができますが)のような鐘や笛を探しません。

    Fat-Free Minify

    関連する問題