複数のJavaScriptファイルを1つのJSファイルに結合する[終了]


90

Webアプリケーションでjqueryを使用していて、さらに多くのjqueryスクリプトファイルを単一のページにロードする必要があります。

Googleは、すべてのjqueryスクリプトファイルを1つのファイルに結合することを提案しました。

これどうやってするの?

回答:


52

Linuxでは、単純なシェルスクリプトhttps://github.com/dfsq/compressJS.shを使用して、複数のJavaScriptファイルを1つのファイルに結合できます。これはClosure Compilerオンラインサービスを利用するため、結果のスクリプトも効果的に圧縮されます。

$ ./compressJS.sh some-script.js another-sctipt.js onemore.js

1
これはハンドルバーで機能しますか?
Dan Baker

3
GruntやGulpなどのタスクマネージャを使用する方が、自動的に実行されます。Gruntを使用して、less、typescript、handlebarsを生成されたフォルダーにコンパイルし、js / cssファイルも生成されたフォルダーにコピーします。最後に、すべての.jsファイルと1つのcssファイルに1つのjsファイルにも縮小します。すべての.cssファイル。そして、ファイルの変更時にその構成を再実行するウォッチャーがいるので、ファイルを保存してブラウザーを更新でき、すべての変更が1〜3秒以内に適用されます。
Vadorequest


18

テキストファイルを結合して、YUI Compressorのようなものを使用するだけです

コマンドcat *.js > main.jsを使用してファイルを簡単に組み合わせることができ、次にを使用してmain.jsをYUIコンプレッサーで実行できjava -jar yuicompressor-x.y.z.jar -o main.min.js main.jsます。

2014年8月の更新

これで、JavaScriptの連結と圧縮にGulpを使用するように移行しました。さまざまなプラグインといくつかの最小限の構成と同様に、依存関係のセットアップ、coffeescriptのコンパイルなど、JSの圧縮などを実行できます。


YUIコンプレッサーリンクが停止しています。
改革

11

あなたはこれを行うことができます

  • a。手動:すべてのJavascriptファイルを1つにコピーし、その上でコンプレッサーを実行します(オプションですが推奨されます))し、サーバーにアップロードしてそのファイルにリンクします。
  • b。PHPを使用する:すべてのJSファイルとincludeそれらすべての配列を作成し、<script>タグに出力するだけです

1
オプションBは、大きな.jsファイルに対する1つの要求(高速)ではなく、小さな個々の.jsファイルすべてに対する多数の要求(低速)をブラウザーに発生させるため、お勧めできません。
Mikepote 2013年

5
@Mikepote、はい...したがって、単語を使用しました。includeつまり、複数のファイルにリンクする<script src = "....">を行わないで、1つのスクリプト要素にそれらを含めます。理想的には、適切なキャッシングとともにcdnを使用する必要があります。
Gary Green

すみません、あなたの答えを読み違えました。
Mikepote 2013年

3
ここで例を挙げていただけますか。
Anand Solanki 14

readfile()を使用して、解析のオーバーヘッドを回避し、誤って何かを解釈させないようにすることをお勧めします。
Chinoto Vokro 2016年

9

私は通常それを持っていますMakefile

# All .js compiled into a single one.
compiled=./path/of/js/main.js

compile:
    @find ./path/of/js -type f -name "*.js" | xargs cat > $(compiled)

次に、実行します:

make compile

お役に立てば幸いです。


8

Linux https://github.com/eloone/mergejsでこのシェルスクリプトを使用しています

上記のスクリプトと比較すると、非常に使いやすいという利点があります。また、マージしたいjsファイルをコマンドラインではなく入力テキストファイルにリストできるため、リストを再利用でき、ファイルをマージするたびに入力する必要はありません。本番環境に移行するたびにこの手順を繰り返すため、非常に便利です。マージしたくないファイルをリストにコメントすることもできます。入力する可能性が最も高いコマンドラインは次のとおりです。

$ mergejs js_files_list.txt output.js

そして、結果のマージされたファイルも圧縮したい場合:

$ mergejs -c js_files_list.txt output.js

これoutput-min.jsにより、Googleのクロージャーコンパイラーによって縮小されたものが作成されます。または:

$ mergejs -c js_files_list.txt output.js output.minified.js

という名前の縮小ファイルに特定の名前が必要な場合 output.minified.js

シンプルなウェブサイトにとても役立ちます。


7

スクリプトのグループ化は逆効果です。http://yepnopejs.com/http://headjs.comなどを使用して、スクリプトを並行してロードする必要があります。


5
JavaScriptファイルを組み合わせるには、正当な理由があります。1つは、20の2 kbファイルをリクエストする方が、40 kbのファイルを1つリクエストするよりも時間がかかる可能性が高いからです。
Joel B

1
ミレニアムあたり何回発生しますか?
カプセル

4
あなたが思うよりも頻繁に。stackoverflowのソースコードを見てみましょう:「...オプションBはお勧めしません。ブラウザが1つの大きな.jsに対する1つのリクエストではなく、小さな個々の.jsファイルすべてに対して多くのリクエスト(低速)を要求するためです。ファイル(より高速)。」
Joel B

4
@Capsule申し訳ありませんが、インターネットはjQueryからMVC JavaScriptに急速に移行しています。1つのファイルをロードする方が、複数のHTTPリクエストを起動するよりも常に高速です。
Foxhoundn

1
@FoxhoundnインターネットもHTTP2に急速に移行しているので、もはや問題ではなくなります。とにかく、jQueryは単なる例であり、MVC JS
Capsule

7

このスクリプトをメモ帳にコピーし、.vbsファイルとして保存します。このスクリプトに.jsファイルをドラッグ&ドロップします。

ps。これはWindowsでのみ機能します。

set objArgs = Wscript.Arguments
set objFso = CreateObject("Scripting.FileSystemObject")
content = ""

'Iterate through all the arguments passed
for i = 0 to objArgs.count  
    on error resume next
    'Try and treat the argument like a folder
    Set folder = objFso.GetFolder(objArgs(i))
    'If we get an error, we know it is a file
    if err.number <> 0 then
        'This is not a folder, treat as file
        content = content & ReadFile(objArgs(i))
    else
        'No error? This is a folder, process accordingly
        for each file in folder.Files
            content = content & ReadFile(file.path)
        next
    end if
    on error goto 0
next

'Get system Temp folder path
set tempFolderPath = objFso.GetSpecialFolder(2)
'Generate a random filename to use for a temporary file
strTempFileName = objFso.GetTempName
'Create temporary file in Temp folder
set objTempFile = tempFolderPath.CreateTextFile(strTempFileName)
'Write content from JavaScript files to temporary file
objTempFile.WriteLine(content)
objTempFile.Close

'Open temporary file in Notepad
set objShell = CreateObject("WScript.Shell")
objShell.Run("Notepad.exe " & tempFolderPath & "\" & strTempFileName)


function ReadFile(strFilePath)
    'If file path ends with ".js", we know it is JavaScript file
    if Right(strFilePath, 3) = ".js" then       
        set objFile = objFso.OpenTextFile(strFilePath, 1, false)
        'Read entire contents of a JavaScript file and returns it as a string
        ReadFile = objFile.ReadAll & vbNewLine
        objFile.Close
    else
        'Return empty string
        ReadFile = ""
    end if  
end function

5

orangutancloudが示唆するように、Closure-compilerを使用できます。JavaScriptを実際にコンパイル/縮小する必要がないことを指摘する価値があります。JavaScriptテキストファイルを単一のテキストファイルに単純に連結できるはずです。通常ページに含まれている順序で参加してください。


はい、良い点です。ユーザーまたはプラグインの作成者が適切な構文に追いついていない場合、またはデバッグしようとしている場合、クロージャーコンパイラーは扱いにくい場合があります。ただし、最も基本的なモードで使用する場合に役立ちます。私は個人的にDojoが大好きで、Dojoプロジェクトでビルドシステムを使用しています。これは、すべてを1つのファイルに保存するのに役立ちます。ただし、これはデプロイメントでは有用であり、開発では有用ではありません。
Tom Gruner、2011

4

PHPを実行している場合は、CSSとJSの両方でオンザフライで結合および縮小するため、Minifyをお勧めします。設定したら、通常どおりに作業するだけで、すべてが処理されます。



2

私が作成したスクリプトを使用できます。ただし、これを実行するにはJRubyが必要です。 https://bitbucket.org/ardee_aram/jscombiner(JSCombiner)。

これを際立たせるのは、JavaScriptでのファイルの変更を監視し、選択したスクリプトに自動的に結合することです。したがって、Javascriptをテストするたびに手動で「ビルド」する必要はありません。お役に立てば幸いです。現在使用しています。


0

これは少し手間がかかるかもしれませんが、私のオープンソースWikiプロジェクトをcodeplexからダウンロードできます。

http://shuttlewiki.codeplex.com

これには、http://yuicompressor.codeplex.com/を使用するCompressJavascriptプロジェクト(およびCompressCSS)が含まれていますプロジェクト。

コードは自明ですが、ファイルの結合と圧縮が少し単純になります---私にとってはとにかく:)

ShuttleWikiプロジェクトは、ビルド後のイベントで使用する方法を示しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.