Как удалить вызовы ведения журнала JS в нашей производственной сборке нашего веб-приложения mvc3?

У нас есть много вызовов наших методов ведения журнала (которые просто обертывают console.log) во всем нашем JS в нашем веб-приложении MVC3, и я хотел бы удалить их из JavaScript, когда мы создаем наши тестовые и производственные сборки.

В настоящее время мы используем пакет nuget для объединения и минимизации для объединения и минимизации нашего JS. в один большой уменьшенный файл, но я бы хотел, чтобы он также вырвал вызовы методов ведения журнала.

У нас есть механизм, который заменяет методы протоколирования пустыми функциями, чтобы они не выполняли никакой работы в продакшене, но они по-прежнему вызываются и передаются различные аргументы. Кроме того, есть «большие» строки, которые передаются, и их можно удалить, уменьшив размер файла.

Идеальным решением, на мой взгляд, было бы каким-то образом проанализировать JavaScript и обнаружить/удалить вызовы этих методов. Желательно в каком-то движке JavaScript, а не только в регулярном выражении.

В любом случае, я просто хочу, чтобы мои вызовы методов ведения журнала были удалены из финального кода JavaScript, который используется в производстве. Кто-нибудь знает, как мне выполнить эту дополнительную минификацию?


person Allen Rice    schedule 04.06.2012    source источник
comment
Посмотрите здесь: stackoverflow.com/questions/9816845/   -  person Valamas    schedule 05.06.2012
comment
очень красиво, выглядит многообещающе. Я должен тщательно исследовать это   -  person Allen Rice    schedule 05.06.2012
comment
Валамас, эй, препроцессор отлично работает, можешь опубликовать это как ответ, и я приму его?   -  person Allen Rice    schedule 05.06.2012
comment
спасибо, но вы должны удалить этот вопрос. Это не мой ответ. есть хороший.   -  person Valamas    schedule 05.06.2012
comment
Ну, одна интересная вещь, которую я обнаружил, заключается в том, что этот материал типа препроцессора был добавлен в минимизатор Microsoft ajax. Я не знал, что они повторно использовали тот же минификатор для IBundleTransform работы, что и для MVC4. Технически этот вопрос несколько отличается, потому что меня особенно интересуют новые вещи для связывания и минимизации, а не минификатор ajax. Поскольку новый материал, вероятно, будет более популярным и чаще будет появляться в поиске, я оставлю этот вопрос.   -  person Allen Rice    schedule 05.06.2012


Ответы (2)


Да, интерфейс IBundleTransform был разработан для этого сценария. В битах RC вот что мы предусмотрели:

new Bundle("~/bundles/js", new LogRemoverTransform(), new JsMinify());

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

person Hao Kung    schedule 15.06.2012
comment
Здорово! Вы работали над комплектацией? Если да, то спасибо и отличной работы! - person Allen Rice; 16.06.2012
comment
Отличная работа, мне нравится, как теперь мы можем просто использовать преобразования в виде пакетов nuget. - person Allen Rice; 13.07.2012

Вы можете написать свою собственную реализацию IBundleTransform, который сначала удаляет вызовы ваших методов ведения журнала с помощью регулярного выражения, а затем вызывает функции объединения и минимизации по умолчанию. Пока ваши вызовы довольно просты, придумать их не составит труда. Однако это может оказаться сложным, в зависимости от того, как вы вызываете свой код ведения журнала.

Например, было бы довольно сложно (для меня) создать регулярное выражение, которое бы улавливало весь вызов ведения журнала, например:

NS.log(function () { return "this is going to be hard to parse"; }());

Но, пока вы не ведете такой журнал, написать регулярное выражение не должно быть сложно.

person Allen Rice    schedule 04.06.2012