tslint говорит, что вызовы console.log не разрешены. Как мне это разрешить?


102

Я только начал использовать приложение create-response-app с машинописным текстом

create-react-app my-app --scripts-version=react-scripts-ts

а конфигурация tslint.json по умолчанию не допускает console.log ().

Как я могу (пока) включить console.log?

Документы для этого находятся на https://palantir.github.io/tslint/rules/no-console/ . Но они не говорят, где поставить эту строку:

    "no-console": [true, "log", "error"]

Я искал и нашел этот синтаксис файла конфигурации tslint.json , поэтому я попробовал это:

"rules": {
    "no-console": [true, "warning"]
}

В попытке получить сообщения журнала, которые были бы просто предупреждениями. Но это не сработало.

Я закомментировал несколько строк console.log (), которые у меня есть, но я хочу иметь возможность сделать это в будущем.

Ответы:


200

Добавьте // tslint:disable-next-line:no-consoleстроку прямо перед вызовом, console.logчтобы предотвратить появление сообщения об ошибке только один раз.

Если вы хотите полностью отключить правило, добавьте в свой tslint.json(скорее всего, в корневую папку) следующее:

{
    "rules": {
        "no-console": false
    }
}

6
Я не уверен, что произошло, но теперь "no-console": false у меня не работает. Я нашел способ разместить его // tslint:disable:no-consoleв верхней части файла.
PatS

10
"no-console": false у меня работает, но мне нужно перезапустить "npm start", чтобы он вступил в силу.
jlb

2
"no-console": falseу меня не работает, даже с npm run start.
Эрик Фулмер

18
@EricFulmer поместил это в узел "jsRules". "jsRules": {"no-console": false},
billb

Я добавил правило jsRulesи сделал все заново, yarn startпрежде чем ошибки исчезли. Не уверен, кто из них это сделал.
Байрон Уолл

28

Для тех из вас, кто пришел сюда со смешанной базой кода javascript и машинописного текста.

Возможно, вам потребуется определить опцию «no-console» в jsRules, объекте правил jslints для файлов javascript, т.е. существуют отдельные объекты правил для javascript и машинописного текста.

//tslint.json

{
  "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], //Example... 
  "rules": {
    "no-console": false //Disable for typescript
  },
  "jsRules": {
    "no-console": false //Disable for javascript
  }
}

но - какова цель этой штуки?
roberto tomás

Из jsRules или без консоли?
Ли Бриндли

no-console - кажется (я посмотрел), что он нужен только для того, чтобы предупредить вас, что сообщения консоли не принадлежат производственному коду. Это своего рода сомнительное правило всякий раз, когда ваш env не является продуктом
Роберто Томас

В какой-то степени я понимаю вашу точку зрения. Одна вещь, которую следует учитывать, заключается в том, что консоль не является частью языка javascript, она обычно реализуется в движках javascript, но в этом суть - она ​​не является частью языка javascript, вы запекаете зависимость в своем коде, которая может существовать или не существовать . С учетом сказанного, я вижу применение этого правила.
Ли Бриндли

@ robertotomás, Это правило основано на лучшем опыте отсутствия сообщений console.log в вашем коде. В производственном коде этого не должно быть, чтобы вы знали, что продукт не готов. У вас может быть две конфигурации tslint: одна разрешает это, а другая нет. У меня есть logger.infoфункция, которая вызывает console.log(то есть оболочку), которая позволяет мне легко включать или отключать ведение журнала для всего приложения. Я не говорю, что это лучшая практика, просто то, что я сделал. Это также упрощает интеграцию с другим регистратором, например github.com/krakenjs/beaver-logger .
PatS


6

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

"no-console": {
    "severity": "warning",
    "options": [
        "log",
        "error",
        "debug",
        "info",
        "time",
        "timeEnd",
        "trace"
    ]
},

Это отлично работает как предупреждение. Кстати, это не задокументировано в документации tslint.
nelson6e65

1

в typeScript версии 3 обновите tslint.json в соответствии с ключевым правилом, как показано ниже:

"no-console": [
    true,
    "debug",
    "time",
    "timeEnd",
    "trace"
],

таким образом вы просто указываете debug, time, timeEnd, trace, которые не будут использоваться, если в вашем tslint по умолчанию "информация" есть в списке, просто удалите его.


1
Именно так это должно быть сделано, как указано в документации palantir.github.io/tslint/rules/no-console
Кристофер Григг,

1

Я обрабатываю правило tslint «без консоли» для каждого файла, который, как я обнаружил, удобен и изолирован на этапе разработки.

Как только мне понадобится использовать первую console.log (); Visual Studio Code показывает возможность добавить:

// tslint: disable-next-line: no-console

console.log ();

Итак, здесь я просто удаляю «-next-line», и эта команда покрывает весь файл.

// tslint: disable: no-console

console.log ();

Я надеюсь, что в качестве альтернативы отключение этой функции для всего приложения поможет.

РОН


0

Согласно документам: https://eslint.org/docs/user-guide/getting-started#configuration

  • "off" или 0 - выключить правило
  • «warn» или 1 - включить правило как предупреждение (не влияет на код выхода)
  • «ошибка» или 2 - включить правило как ошибку (код выхода будет 1)

Кстати, ваша правильная установка будет

{
  "rules": {
    "no-console": false
  }
}


0
  {
    "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"],
    "linterOptions": {
        "exclude": [
            "config/**/*.js",
            "node_modules/**/*.ts",
            "coverage/lcov-report/*.js"
        ]
    },
    "rules": {
        "no-console": false
    },
    "jsRules": {
        "no-console": false
    }
 }

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.