10

アップロード時に処理スクリプトを介して特定のファイルタイプを自動的に実行する良い方法を知っている人はいますか? サーバーにアップロードするときに CSS と Javascript を自動的に縮小し、ローカル側で人間が読める素敵なバージョンを保持しながら、縮小版をサーバーに保持しようとしています。私は現在、Windows で WinSCP を使用しています。これはある程度スクリプト化可能ですが、十分にスクリプト化できない可能性があります。おそらく、ある種の石畳のソリューションが必要になるので、ダクトテープを使用したものを提案することを恐れないでください。ただし、共有ホスティングを使用しており、サーバーにジャンクをインストールできないため、ローカルコンピューターで縮小を行い、圧縮されたファイルをアップロードする必要があります。

ありがとう。

4

8 に答える 8

7

この特定の問題を解決するために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}$@

combined.js: main.js listview.js tabs.js
    cat $^ > ${OUTDIR}$@

.PHONY: install

install:
    cp ${INST_TARGETS} ${PUBDIR}

次に、入力する必要があるのは次のとおりです。

make && make install

まず、すべての開発ファイルを取得して1つのファイルに連結し、次に連結されたファイルを圧縮してパブリックディレクトリにコピーします。圧縮にYUICompressorを使用していますが、非常にうまく機能します。

于 2009-08-31T23:46:49.003 に答える
2

この minfier スクリプトを Python で作成しました。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)
于 2009-12-22T20:29:19.443 に答える
2

私はミニファイが好きです。オンザフライでのhtml、javascript、およびcssの圧縮とトリミングをサポートしています。

非常に柔軟で、既存のアプリに統合できます。

より高度な機能のいくつかは、css と同じように、複数の JavaScript ファイルを 1 つに結合することです。結合するファイルを定義する複数の方法があり、テスト目的に役立ちます。これにより、毎回設定を変更する必要がなくなります。

于 2009-08-31T21:28:01.250 に答える
1

ライブ サーバーにアップロードする前に、開発マシンで圧縮し (何らかの自動化された方法で)、テストすることをお勧めします。デプロイ プロセスの最終段階で JavaScript を根本的に変更すると、エラーが発生するリスクが明らかになります。

于 2009-09-01T10:41:03.260 に答える
1

夢のようにjsとcssを自動的に提供する本当にクールなソリューション。

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

特徴

  • 複数の CSS または JavaScript ファイルを 1 つのダウンロードに結合および縮小します
    • Douglas Crockford の JSMin ライブラリとカスタム クラスの拡張ポートを使用して、CSS と HTML を縮小します。
    • 不要な作業を避けるために、サーバー側 (files/apc/memcache) にキャッシュします
    • ブラウザに最新のキャッシュ コピーがある場合、HTTP 304 (Not Modified) 応答で応答します。
    • ほとんどのモジュールは必要に応じて遅延ロードされます (304 応答は最小限のコードを使用します)
    • 結合された CSS ファイル内の相対 URI を自動的に書き換えて、有効な場所を指すようにします
    • キャッシュを有効にすると、Minify は適度に強力なサーバーで 1 秒あたり数百のリクエストを処理できます。
    • Content-Encoding: リクエスト ヘッダーに基づく gzip。キャッシングにより、Apache の mod_deflate オプションよりも高速に gzip 圧縮されたファイルを提供できます!
    • ほとんどのコンポーネントのテスト ケース
    • サードパーティのミニファイアーを簡単に統合
    • HTTP エンコーディングとキャッシュ制御のための別個のユーティリティ クラスenter code here
于 2009-11-10T09:16:00.433 に答える
0

両方 (JS と CSS) にはさらに軽量なソリューションがあるため、「オンザフライで縮小」できます。任意の言語に簡単に移植できるはずです (現在は PHP です)。これは、実際には PHP Fat-Free Framework の一部であり、不可欠な部分です。このリンクをたどって、私のコードを見てください。それは単なる単一の機能です。ファイルの結合、base-X エンコーディング、変数の短縮、さらには gzip エンコーディング (簡単に追加できますが) などの付加機能を探してはいけません。

無脂肪ミニファイ

于 2010-02-20T05:29:40.780 に答える