Исключите код JavaScript отладки во время минификации

Я изучаю различные способы уменьшить мой код JavaScript включая регулярный JSMin, Упаковщика и решения YUI. Я действительно интересуюсь новым Google Closure Compiler, поскольку это выглядит исключительно мощным.

Я заметил, что у упаковщика Dean Edwards есть функция для исключения строк кода, которые запускаются с трех точек с запятой. Это удобно для исключения кода отладки. Например:

;;;     console.log("Starting process");

Я провожу некоторое время, очищая мою кодовую базу и хотел бы добавить подсказки как это для легкого исключения кода отладки. При подготовке к этому я хотел бы выяснить, является ли это лучшим решением, или если существуют другие методы.

Поскольку я не выбрал, как уменьшить все же, я хотел бы убрать код способом, который совместим с любым minifier, с которым я заканчиваю тем, что шел. Таким образом, мои вопросы - они:

  1. Действительно ли использование является точками с запятой стандартная техника или является там другими способами сделать это?

  2. Действительно ли Упаковщик является единственным решением, которое обеспечивает эту функцию?

  3. Другие решения могут быть адаптированы для прокладывания себе путь также, или сделать у них есть альтернативные способы выполнить это?

  4. Я, вероятно, начну использовать Компилятор Закрытия в конечном счете. Есть ли что-нибудь, что я должен сделать теперь, когда подготовился бы к нему?

40
задан Peter Mortensen 23 April 2016 в 21:51
поделиться

3 ответа

Хорошим решением в этом случае может быть js-build-tools , который поддерживает «условную компиляцию».

Короче говоря, вы можете использовать комментарии, такие как

// #ifdef debug
var trace = debug.getTracer("easyXDM.Rpc");
trace("constructor");
// #endif

, где вы определяете прагму, такую ​​как debug .

Затем при его создании (у него есть задача муравья)

//this file will not have the debug code
<preprocess infile="work/easyXDM.combined.js" outfile="work/easyXDM.js"/>
//this file will        
<preprocess infile="work/easyXDM.combined.js" outfile="work/easyXDM.debug.js" defines="debug"/>
6
ответ дан 27 November 2019 в 01:19
поделиться

Я пока не разбирался в минификации, но такое поведение можно было бы реализовать с помощью простого регулярного выражения:

s/;;;.*//g

Это заменяет все в строке после трех точек с запятой (включая их) ничем, поэтому перед минимизацией оно отбрасывается. Вы можете запустить sed (или аналогичный инструмент) перед запуском вашего инструмента минификации, например:

sed 's/;;;.*//g' < infile.js > outfile.js

Кстати, если вам интересно, будет ли упакованная версия или минифицированная версия «лучше», прочтите это сравнение методов сжатия JavaScript .

0
ответ дан 27 November 2019 в 01:19
поделиться

Вот что я использую с Closure Compiler. Во-первых, вам нужно определить переменную DEBUG следующим образом:

/** @define {boolean} */
var DEBUG = true;

Она использует аннотацию JS для закрытия, о которой вы можете прочитать в документации.

Теперь, когда вам понадобится код, предназначенный только для отладки, просто оберните его в оператор if, например, так:

if (DEBUG) {
  console.log("Running in DEBUG mode");
}

При компиляции кода для выпуска добавьте следующую команду компиляции: --define='DEBUG=false' -- любой код внутри оператора debug будет полностью удален из скомпилированного файла.

25
ответ дан 27 November 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: