Объедините несколько файлов JavaScript в один файл JS
Я использую jquery в своем веб-приложении, и мне нужно загрузить больше файлов сценариев jquery на одной странице.
Google предложил объединить все файлы сценариев jquery в один файл.
Как я могу это сделать?
13 ответов
В Linux вы можете использовать простой скрипт оболочки https://github.com/dfsq/compressJS.sh чтобы объединить несколько файлов javascript в один. Он использует онлайн-сервис Closure Compiler, поэтому полученный скрипт также эффективно сжимается.
$ ./compressJS.sh some-script.js another-sctipt.js onemore.js
Просто объедините текстовые файлы, а затем используйте что-то вроде YUI Compressor.
Файлы могут быть легко объединены с помощью команды cat *.js > main.js
и main.js можно запустить через YUI-компрессор, используя java -jar yuicompressor-x.y.z.jar -o main.min.js main.js
,
Обновление августа 2014
Теперь я перешел на использование Gulp для конкатенации и сжатия javascript, так как с различными плагинами и некоторой минимальной конфигурацией вы можете делать такие вещи, как настройка зависимостей, компиляция coffeescript и т. Д., А также сжатие вашего JS.
Попробуйте компилятор Google Closure:
http://code.google.com/closure/compiler/docs/gettingstarted_ui.html
Вы можете сделать это через
- а. Вручную: скопируйте все файлы Javascript в один, запустите компрессор (необязательно, но рекомендуется), загрузите на сервер и создайте ссылку на этот файл.
- б. Используйте PHP: просто создайте массив всех файлов JS и
include
их все и выводить в<script>
тег
У меня обычно это есть на 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
Я надеюсь, что это помогает.
Я использую этот сценарий оболочки в 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
Я считаю, что это действительно полезно для простого сайта.
Скопируйте этот скрипт в блокнот и сохраните как файл.vbs. Перетащите.js файлы на этот скрипт.
пс. Это будет работать только на окнах.
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
Группировка скриптов контрпродуктивна, вы должны загружать их параллельно, используя что-то вроде http://yepnopejs.com/ или http://headjs.com/
Вы можете использовать Closure-компилятор, как предлагает orangutancloud. Стоит отметить, что на самом деле вам не нужно компилировать / минимизировать JavaScript, должна быть возможность просто объединить текстовые файлы JavaScript в один текстовый файл. Просто присоединяйтесь к ним в том порядке, в котором они обычно находятся на странице.
Вы можете использовать KjsCompiler: https://github.com/knyga/kjscompiler Классное управление зависимостями
Если вы используете PHP, я рекомендую Minify, потому что он объединяет и минимизирует как для CSS, так и для JS. После того, как вы настроили его, просто работайте как обычно, и он позаботится обо всем.
Вы можете использовать скрипт, который я сделал. Вам нужно JRuby, чтобы запустить это все же. https://bitbucket.org/ardee_aram/jscombiner (JSCombiner).
Это отличает то, что он отслеживает изменения файлов в javascript и автоматически объединяет их со сценарием по вашему выбору. Поэтому нет необходимости вручную "строить" свой javascript каждый раз, когда вы его тестируете. Надеюсь, это поможет вам, я в настоящее время использую это.
Это может быть немного усилий, но вы можете скачать мой вики-проект с открытым исходным кодом из codeplex:
http://shuttlewiki.codeplex.com/
Он содержит проект CompressJavascript (и CompressCSS), который использует проект http://yuicompressor.codeplex.com/.
Код должен быть понятен, но он делает объединение и сжатие файлов немного симнплерным --- для меня в любом случае:)
Проект ShuttleWiki показывает, как использовать его в событии после сборки.