Исходный код сжатого фрагмента: closure inspector
В этой статье мы рассмотрим, как просмотреть исходный код сжатого фрагмента при помощи Closure Inspector для Firebug, и как адаптировать это расширение под себя.
При сжатии javascript оптимизатор Google Closure Compiler может генерировать source map - файл-карту исходного кода. В этом файле хранится соответствие между фрагментами сжимаемого и сжатого файла.
Closure Inspector - оригинальное расширение для (Firebug). Оно позволяет загрузить файл-карту и исходный скрипт, и затем переходить от скомпилированного скрипта к соответствующему месту в исходном файле.
Это призвано упростить отладку, особенно в режиме "продвинутой" оптимизации, когда Google Closure Compiler агрессивно переименовывает свойства и инлайнит вызовы.
Для начала, нужно подготовить файл-карту исходного кода.
Это делается указанием опции --create_source_map при сжатии.
Для примера, сожмем файл dojo.js, создав файл-карту в C:\sourcemap .
java -jar compiler.jar --js dojo.js --create_source_map c:\sourcemap --js_output_file dojo.compiled.js
Если инспектор еще не стоит - нужно его поставить. На момент написания статьи, последняя версия - closureinspector09.xpi.
Скачайте и сохраните на диске xpi-файл. Расширение можно установить, просто открыв (перетащив) файл в Firefox.
Использовать Closure Inspector очень просто. Достаточно открыть любую страничку в Firefox и перейти на вкладку Firebug "Сценарии" (Scripts).
При этом справа будет доступен новый пункт "Source mapping":
Выбираем нужный скрипт. На картинке это pack.2.js, отмечен зеленым.
Кликнув на "Open Local File", открываем локальный файл c:\sourcemap.
Все готово, у инспектора есть source map и исходный скрипт.
Теперь, кликнув правой кнопкой на любом месте сжатого кода, мы увидим пункт "Show Original Source":
При клике на этот пункт Inspector предложит вам указать корневую директорию, где находятся откомпилированные скрипты. В нашем примере это директория, где лежит dojo.js.
Кстати, нажав на выпадающее меню Source Mapping, вы имеете возможность указать корневую директорию таких файлов:
Это полезно, когда откомпилированный файл собран из нескольких исходников, как это обычно и бывает.
При первом запуске, затем появится еще одно диалоговое окно с предложением указать директорию, где будет храниться файл с настройками инспектора. Укажите любую, удобную вам.
После всего этого вы, по идее, должны иметь возможность посмотреть исходный код, кликнув на участок откомпилированного в панели Script.
Однако, обычно этого не происходит, вместо кода вы увидите alert с файлом и номером строки.
Для того, чтобы получить больше, настроим инспектор под себя.
Это весьма необычно для Firebug-расширений, но для просмотра исходного кода инспектор использует не браузер, а системный текстовый редактор.
Редкатор берется из переменной окружения EDITOR и запускается с указанием файла и строки.
Однако, даже поставив эту переменную на любимый редактор, вы, вполне возможно, получите сообщение о том, что ваш редактор "unsupported" - не поддерживается.
Чтобы разобраться с этой проблемой, нам придется пересобрать расширение под выбранный редактор. Это звучит сложнее, чем есть на самом деле. Весь процесс состоит из нескольких шагов.
-
Формат расширения - обычный zip. Поэтому разархивируем xpi-файл с Closure Inspector в директорию inspector.
- Код, вызывающий редактор, находится в файле chrome/content/inspector/helpers.js. Функция называется
clInspector.Helpers.displayFileInIDE . Вот ее код на момент написания статьи:
/**
* Displays the given source file in the user's IDE (as indicated
* by the $EDITOR environment variable) and opens it to the given
* line.
*
* @param {string} path The path of the file to be displayed.
* @param {number} line The line number to display in the file.
*/
clInspector.Helpers.displayFileInIDE = function(path, line) {
if (!clInspector.Helpers.hasEnvVariable('EDITOR')) {
alert('Original Source File: ' + path + '\n' +
'Line Number:' + line);
return;
}
// Retrieve the editor for the user.
var editor = clInspector.Helpers.getEnvVariable('EDITOR');
var editorBinary = editor;
var lastSlash = editor.lastIndexOf('/');
if (lastSlash == -1) {
lastSlash = editor.lastIndexOf('\\');
}
if (lastSlash >= 0) {
editorBinary = editor.substr(lastSlash + 1);
}
// Handle the supported binaries.
var arguments = [];
switch (editorBinary) {
case 'emacs':
arguments.push("+" + line);
arguments.push(path);
break;
case 'vi':
case 'vim':
case 'gvim':
arguments.push(path);
arguments.push("+" + line);
break;
default:
arguments.push(path);
alert('The editor "' + editorBinary + '" is unsupported. The line ' +
'number in the file is ' + line);
break;
}
// Find the full path of the editor so we can open it.
var editorPath = clInspector.Helpers.findBinary(editor);
if (!editorPath) {
alert('Original Source File: ' + path + '\n' +
'Line Number:' + line);
return;
}
// Launch the editor.
FBL.launchProgram(editorPath, arguments);
};
Как видите, поддерживаются лишь несколько редакторов. Чтобы добавить новый, достаточно поменять эту функцию.
Для этого ваш редактор обязан поддерживать в параметрах запуска путь и номер строки. Поддерживаемые редакторы vi(m), emacs, gvim это умеют.
Легкий редактор SciTe под Windows также может запускаться с такими параметрами. Например:
SciTE "-open:C:\\Program Files\\SciTE\\SciTEDoc.html" -goto:123
Таким образом, чтобы заработал SciTe, достаточно поменять функцию в файле на такую:
clInspector.Helpers.displayFileInIDE = function(path, line) {
var editorPath = "c:\\program files\\scite\\SciTE.exe"
var arguments = ['-open:'+path.replace(/\\/g,'\\\\')+'', '-goto:'+line]
// Launch the editor.
FBL.launchProgram(editorPath, arguments);
};
- Запаковываем xpi обратно. Обратите внимание, в архиве должно быть содержимое директории с расширением, а не сама директория (собственно, как и было до разархивации).
zip -r inspector.xpi *
- Теперь открываем новый xpi-файл в Firefox и устанавливаем расширение.
Все, теперь можно просматривать исходный код сжатого фрагмента непосредственно в SciTe.
Аналогичным образом вы можете настроить любой редактор, если он поддерживает переход к указанной строке.
|
Вторая картинка ( там где мы должны увидеть пункт "Show Original Source") в статье не показывается.
Поправил
Very well written post.It is a sign of the times that so many different languages are spoken within the same country. This article is well-written, interesting and informative. Kitchen Design Tacoma Wa
Roksa piła
Roksa pl ogłoszenia towarzyskie kobiet
I've already read a few of the content - your website, and I thoroughly like your writing style. nytimes wordle
Playing games is fun. With the challenge that it brings, fall guys 3 is a game that people of all ages can enjoy. Try to beat the other people. To win, you have to compete in crowded areas and get through chapters with obstacles.
thanks for sharing!
This will not be difficult for all players. All ages can play the drift boss game.
On sweltering summer days, there is nothing better than finding a nice game to play at home. I strongly suggest badland
awesome I need to know more about playing football legends and watching comfortable movies because they are two of my favorite things to do.
Finding a relaxing indoor activity to enjoy on hot summer days is ideal. I urge you to geometry dash
Оно позволяет загрузить файл-карту и исходный скрипт, и затем переходить от скомпилированного скрипта к соответствующему месту в исходном файле. kitchen remodeling Belmont
Positive site spanish dictionary, where did you get the information about this post? I have now read some of the articles on your site and I really like your style spanish to english. Thanks a million and keep up the good work.
The launch parameters' path and line number must be supported by your editor. This is possible with supported editors vi(m), emacs, and gvim. | texas factoring company
Are you a fan of basketball? Do you enjoy playing online games with your friends or other players from around the world? If so, you might want to check out basketball stars, a multiplayer basketball game that lets you show off your skills and compete for glory.
This is such a great resource that you are providing and you give it away for free. I love seeing blog that understand the value of providing a quality resource for free Moto x3m
Благодаря вашему сообщению я смог просмотреть исходный код сжатого фрагмента с помощью Closure Inspector для Firebug. Информация, которой вы делитесь, очень применима. doodle baseball
The information you share is great, please continue to write about this topic regularly moto x3m
My wish is that there is much more to come. We value your input very much.
The knowledge you offer is fantastic. Please continue to write about this issue on a regular basis. dordle
Our mission is to satisfy every client by offering outstanding service and top-notch craftsmanship. We take great satisfaction in our residential home painting meticulous attention to detail and our dedication to doing the task correctly the first time.
Отправить комментарий
Приветствуются комментарии:Для остальных вопросов и обсуждений есть форум.