Есть ли какой-либо способ отменить компилятор закрытия эффектов (или что-то подобное) в коде?

#javascript #google-closure-compiler

#javascript #google-closure-compiler

Вопрос:

Я совсем недавно взял на себя управление проектом, потому что предыдущая веб-разработка моих клиентов исчезла. Единственные файлы, с которыми мне приходится работать, — это те, что хранятся на локальном сервере. Единственная проблема, с которой я столкнулся, заключается в том, что весь JS был запущен через компилятор закрытия (или что-то в этом роде), что делает чтение javascript действительно раздражающим (по крайней мере, для больших функций). Есть ли что-нибудь, что помогло бы мне заменить переменные в JS, чтобы у меня было что-то более чистое для просмотра? Я делал это вручную, и это становится довольно утомительным.

Вот пример того, с чем я имею дело:

     var n = {},
        e = a.extend(n, x),
        y = "pageLoaded",
        u = "pageLoading",
        c = "modLoaded",
        w = "xhrComplete",
        l = true,
        v = false,
        s = a("body"),
        g = Modernizr.historymanagement,
        f = "",
        t = "",
        r = "",
        k = null,
        b = window.History;
  

Заранее спасибо!

Tre

Комментарии:

1. Если он скомпилирован в РАСШИРЕННОМ РЕЖИМЕ, я не думаю, что вы сможете. Преобразование расширенного режима компилятора закрытия является односторонним. Сопоставление не является однозначным или onto, поэтому вы не можете вернуться к исходному источнику. Скомпилированный JavaScript сильно оптимизирован и переписан, чтобы быть чрезвычайно эффективным. Однако, если код просто сокращен с помощью ПРОСТОГО РЕЖИМА, тогда вы можете обойтись простой заменой имен переменных. Судя по вашему коду, это, вероятно, ПРОСТОЙ РЕЖИМ, потому что в противном случае функция «extend» в разделе «a» будет переименована.

2. И это не «пахнет» как выходные данные компилятора закрытия. Он может быть упакован с каким-либо другим минификатором.

Ответ №1:

Нет. Это перегружено. В определенной степени вы можете заменять токены при назначении литералов — вы могли бы, например, заменить все экземпляры l на true и v на false в коде. Но есть другие вещи, которые он делает, которые было бы намного сложнее отменить, и я не верю, что кто-то приложил к этому много усилий.

Комментарии:

1. Ах, я не знал, что для этого есть термин. Спасибо за предупреждение. Но я так и думал. Я подключал переменные к материалу по мере необходимости, просто чтобы не заблудиться. Это действительно довольно раздражает.

2. Работать с запутанным и перегруженным кодом сложно. Обращение вспять является болезненным. Замена переменных на их соответствующие литералы, вероятно, самое простое, что можно сделать, и это не займет много времени (это можно было бы сделать с помощью JavaScript tokeniser или в более сложной степени с помощью простых регулярных выражений, но я не знаю ни одной утилиты для этого — я никогда особо не искал, хотя, возможно, они есть). Затем также выполните дальнейший рефакторинг, чтобы использовать значимые имена переменных.

3. Есть ли какие-либо инструменты, которые вы бы порекомендовали? Что-нибудь с реальной поддержкой рефакторинга?

4. Не для JavaScript. В любом случае, я выше инструментов рефакторинга. Я использую Vim. 😉