Плохая идея оставить “console.log ()” звонит в Ваш производственный код JavaScript?

По существу у Вас должны быть права администратора (прямо или косвенно) в репозиторий, чтобы сделать это. Можно или настроить репозиторий, чтобы позволить всем пользователям делать это, или можно изменить сообщение журнала непосредственно на сервере.

См. эта часть подрывная деятельность FAQ (шахта акцента):

сообщения Журнала сохранены в репозитории как свойства, присоединенные к каждому пересмотру. По умолчанию, свойство сообщения журнала (svn:log) не может быть отредактировано, как только оно фиксируется . Это вызвано тем, что изменения в свойствах пересмотра (которых svn:log - один) заставляют предыдущее значение свойства быть постоянно отмененным, и Подрывная деятельность пытается препятствовать тому, чтобы Вы делали это случайно. Однако существует несколько способов заставить Подрывную деятельность изменять свойство пересмотра.

первый путь для администратора репозитория для включения модификаций свойства пересмотра. Это сделано путем создания рычага, названного "pre-revprop-change" (см. этот раздел в книге Подрывной деятельности для получения дополнительной информации о том, как сделать это). Рычаг "pre-revprop-change" имеет доступ к старому сообщению журнала, прежде чем это будет изменено, таким образом, это может сохранить его в некотором роде (например, путем отправки электронного письма). Как только модификации свойства пересмотра включены, можно измениться, сообщение журнала пересмотра путем передачи - revprop переключаются на svn propedit или svn propset, как любой из них:

$svn propedit -r N --revprop svn:log URL 
$svn propset -r N --revprop svn:log "new log message" URL 

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

второй способ изменить сообщение журнала состоит в том, чтобы использовать svnadmin setlog. Это должно быть сделано путем обращения к местоположению репозитория в файловой системе. Вы не можете изменить удаленный репозиторий с помощью этой команды.

$ svnadmin setlog REPOS_PATH -r N FILE

, где REPOS_PATH является местоположением хранилища, N является числом пересмотра, сообщение журнала которого Вы хотите изменить, и РЕГИСТРИРУЕТЕ, файл, содержащий новое сообщение журнала. Если рычаг "pre-revprop-change" не существует (или Вы хотите обойти сценарий рычага по некоторым причинам), можно также использовать - опция обходных рычагов. Однако, если Вы решаете использовать эту опцию, быть очень осторожными. Можно обходить такие вещи как уведомления по электронной почте изменения или системы резервного копирования, которые отслеживают свойства пересмотра.

74
задан DavidRR 4 December 2018 в 18:05
поделиться

8 ответов

Это вызовет ошибки Javascript, прервав выполнение блока Javascript, содержащий ошибку.

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

if(typeof console === "undefined") {
    console = { log: function() { } };
}

Если вы используете какие-либо методы, кроме log , вам нужно будет уберите и их.

118
ответ дан 24 November 2019 в 11:51
поделиться

Как уже указывали другие, оставление этого параметра вызовет ошибки в некоторых браузерах, но эти ошибки можно обойти, вставив некоторые заглушки.

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

Кроме того, за несколько лет работы с JavaScript я не могу припомнить, чтобы когда-либо возвращался к функции и говорил: «Ну и дела, Хотел бы я' Я заметил проблему с первого раза. Другими словами, если я к чему-то вернусь, мне вряд ли понадобится та же самая отладочная информация, что мне требовалась в предыдущих случаях.

Только мои два цента ... Удачи!

Я заметил проблему с первого раза. Другими словами, если я к чему-то вернусь, мне вряд ли понадобится та же самая отладочная информация, что мне требовалась в предыдущих случаях.

Только мои два цента ... Удачи!

36
ответ дан 24 November 2019 в 11:51
поделиться

Если у вас есть сценарий развертывания, вы можете использовать его, чтобы исключить вызовы console.log (и минимизировать файл).

Пока вы работаете, вы можете бросить ваш JS через JSLint и записать нарушения для проверки (или предотвращения развертывания).

Это отличный пример того, почему вы хотите автоматизировать развертывание. Если ваш процесс позволяет вам опубликовать файл js с console.logs в нем, в какой-то момент вы сделаете это .

10
ответ дан 24 November 2019 в 11:51
поделиться

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

Другой возможностью было бы запускать ведение журнала только в «режиме отладки», то есть если установлен определенный флаг:

if(_debug) console.log('foo');
_debug && console.log('foo');
5
ответ дан 24 November 2019 в 11:51
поделиться

Hope it helps someone--I wrote a wrapper for it a while back, its slightly more flexible than the accepted solution.

Obviously, if you use other methods such as console.info etc, you can replicate the effect. when done with your staging environment, simply change the default C.debug to false for production and you won't have to change any other code / take lines out etc. Very easy to come back to and debug later on.

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");
5
ответ дан 24 November 2019 в 11:51
поделиться

Figured I would share a different perspective. Leaving this type of output visible to the outside world in a PCI application makes you non-compliant.

2
ответ дан 24 November 2019 в 11:51
поделиться

, похоже, у меня это работает ...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}
4
ответ дан 24 November 2019 в 11:51
поделиться

Хороший однострочник:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
0
ответ дан 24 November 2019 в 11:51
поделиться
Другие вопросы по тегам:

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