37

Web サイト用にコンパイル済みの JavaScript ファイルを作成したいと考えています。開発のために、JavaScript を別々のファイルに保持し、自動化されたスクリプトの一部がファイルを 1 つに連結し、その上でコンプレッサーを実行するようにしたいと考えています。

私の問題は、古い DOS コピー コマンドを使用すると、コンプレッサーが不平を言う EOF マーカーも挿入されることです。

コピー /A *.js コンパイル済み.js /Y

他の人は何をしていますか?

4

10 に答える 10

35

Apache Ant と YUI Compressor の使用をお勧めします。

http://ant.apache.org/

http://yui.github.com/yuicompressor/

このようなものを Ant ビルド xml に入れます。application.js と application-min.js の 2 つのファイルが作成されます。

<target name="concatenate" description="Concatenate all js files">
    <concat destfile="build/application.js">
        <fileset dir="src/js" includes="*.js" />
    </concat>
</target>

<target name="compress" depends="concatenate" description="Compress application.js to application-min.js">
    <apply executable="java" parallel="false">
        <filelist dir="build" files="application.js" />
        <arg line="-jar" />
        <arg path="path/to/yuicompressor-2.4.2.jar" />
        <srcfile />
        <arg line="-o" />
        <mapper type="glob" from="*.js" to="build/*-min.js" />
        <targetfile />
    </apply>
</target>
于 2008-11-19T12:44:45.503 に答える
11

EOF を使用せずにコピーするには、バイナリ モードを使用します。

copy /B *.js compiled.js /Y

結果のファイルに元のファイルの 1 つに由来する可能性のある EOF がまだある場合は、次の亜種で修正できます。

copy /A *.js compiled.js /B /Y

/A は元のファイルから末尾の EOF があれば削除し、/B は結果のファイルに EOF が追加されないようにします。EOF が最後にない場合、ソース ファイルは EOF で切り捨てられます。スイッチの順序は重要です。あなたが書くなら

copy /A *.js /B compiled.js /Y  

- ソース ファイルの EOF は削除されませんが、結果の EOF は追加されません。

自分で試してみてください。DOS コマンドは変です。

于 2008-11-19T10:32:34.723 に答える
6

これは非常に古い質問ですが、javascript を使用して javascript を連結する方法もあることに言及したいと思います。明らかにnodejsを使用しています...たとえば、 このようなnpmモジュールとして公開されたツールがあり、gruntおよびgulpプラグインもあります。

また、jQuery や Modernizr などの大規模なプロジェクトで使用されている非常に興味深い手法についても触れておきたいと思います。このプロジェクトは両方とも、requirejs モジュールを使用して完全に開発されており、requirejs オプティマイザーを非常にスマートな連結子として使用しています。興味深いことに、ご覧のとおり、jQuery も Modernizr も機能するために requirejs を必要としません。これは、コード内の requirejs を取り除くために、requirejs 構文の儀式を削除したために発生します。そのため、requirejs モジュールで開発されたスタンドアロン ライブラリになります。このおかげで、他の利点の中でも特に、ライブラリのカットサム ビルドを実行できます。これは、これらすべてをより詳細に説明するブログ投稿です。

于 2014-11-27T01:42:28.053 に答える
5

コンプレッサー uglifyjs をマシンにインストールします。

sudo npm -g install uglify-js

次に、次のコマンドを使用して、すべての js ファイルを連結および圧縮できます。

cat myAppDir/*.js | uglifyjs > build/application.js
于 2014-07-14T05:11:33.143 に答える
4

以下のパーツからなる機構を作成しました。

  • minfication (js および css 用)
  • パッケージでの集約
  • キャッシング (http ステータス 304 のもの)
  • 開発モードで元のファイルを送信する

あなたのニーズには多すぎるかもしれませんが、他の人が何をしているのかという質問に答えるために、それがどのように機能するかを次に示します。

  1. /css.aspx?package=core などにリクエストが届きます。
  2. xml 構成ファイルでパッケージ名のルックアップを行います (たとえば、パッケージ「コア」にファイル /js/mootools.js および /js/swfobject.js が含まれていることを宣言します)。
  3. 縮小が有効になっているかどうかを確認します。たとえば、開発環境では、縮小された js コンテンツを提供するのではなく、元のファイルを書き込みます。js の場合、これはスクリプト インクルードの document.writes によって行われ、css の場合、インポート ルールを記述します。
  4. 縮小が必要な場合 (実稼働環境で)、リクエストの if-modified-since ヘッダーをチェックします。このクライアントが既に縮小されたコンテンツを持っている場合は、http ヘッダー 304 を送信します。クライアントがコンテンツを必要とする場合は、キャッシュに縮小されたコンテンツがあるかどうかを確認し、それを提供します。それ以外の場合は、縮小して結果を送信します。

これらはすべて、個別のサービスに分割されています。jsminificationwriter サービスに挿入されたキャッシュ サービスがあります。これは、縮小ルールのみを処理する元の縮小サービスを利用します。

このアプローチの優れている点は次のとおりです。

  • これにより、開発チームは js/css の「パッケージ」で考える必要があり、機能を適切に分割し、それらを必要とするページに分散させることができます。
  • 開発中は、適切なファイルと行番号を取得して完全にデバッグできます。
  • YUI などの他のミニフィケーション サービスの実装を接続できます。JsMin は最初のテイクに過ぎませんでした。
  • これは、さまざまなコンテンツ タイプで機能する一般的なアプローチです。

お役に立てれば。必要に応じて、いくつかのコード フラグメントを投稿して、さらに説明することもできます。

于 2008-11-19T10:48:59.137 に答える
3

2 番目に yuicompressor を使用しますが、/packer/ を使用します。

http://johannburkard.de/blog/programming/javascript/automate-javascript-compression-with-yui-compressor-and-packer.html

それは私にとって本当に素晴らしいものでした。

于 2008-11-19T12:51:02.353 に答える
3

次のこともできます。

type *.js > compiled.js
于 2008-11-19T11:39:19.847 に答える
0

また、ビルド ツール (Maven プラグイン)、ランタイム ソリューション (フィルターを使用)、またはコマンド ライン ツールとして使用できるwro4j (Java 用の Web リソース オプティマイザー) を試すこともできます。これにより、リソースを簡単に整理し、ボット タイプのリソース用の多数の圧縮プログラム (js および css) を使用してマージを処理できます。

マージするリソースの定義は、次のように簡単です。

<groups xmlns="http://www.isdc.ro/wro">
  <group name="all">
    <css>/asset/*.css</css>
    <js>/asset/*.js</js>
  </group>
</groups>  

免責事項: 私はこのプロジェクトのコミッターです。

于 2011-09-09T17:41:19.923 に答える