tslint说不允许调用console.log - 我该如何允许它?

143

我刚开始使用 TypeScript 创建 React 应用程序

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()行,但将来希望能够做到这一点。

12个回答

279

在调用console.log之前的行中添加// tslint:disable-next-line:no-console,以防止错误消息仅出现一次。

如果您想完全禁用该规则,请将以下内容添加到您的tslint.json(很可能在根文件夹中):

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

8
我不确定发生了什么事情,但现在 "no-console": false 对我不起作用。我找到的解决方法是在文件顶部放置 // tslint:disable:no-console - PatS
10
"no-console": false 对我有效,但我必须重新启动“npm start”才能生效。 - jlb
2
即使使用 npm run start"no-console": false 对我也不起作用。 - Eric Fulmer
18
把它放在“jsRules”节点里。 “jsRules”: { "no-console": false } - billb
2
console.log('你好,世界'); // tslint:disable-line:no-console - Sergei Kovalenko
显示剩余2条评论

38

对于那些拥有混合 JavaScript 和 TypeScript 代码库的人。

你可能需要在 jsRules 中定义“no-console”选项,该选项是针对 JavaScript 文件的 jslints 规则对象;也就是说,JavaScript 和 TypeScript 都有单独的规则对象。

//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
  }
}

1
但是 - 这个东西的目的是什么? - roberto tomás
jsRules还是no-console? - Lee Brindley
2
no-console--它似乎(我查过)只是为了警告您控制台消息不属于生产代码。这使得它成为一个可疑的规则,除非您的环境不是生产环境。 - roberto tomás
我理解您的观点,但有一点需要考虑的是控制台并不属于JavaScript语言的一部分,通常是在JavaScript引擎中实现的。这虽然是一个关键点,但它并不属于JavaScript语言的一部分,您正在将一种可能存在或不存在的依赖项嵌入到您的代码中。话虽如此,我可以看出这个规则的用处。 - Lee Brindley
2
@robertotomás,这个规则基于最佳实践,不要在代码中使用 console.log 消息。生产代码不应该有这个,所以这让你知道你还没有就绪。你可能有两个 tslint 配置,一个允许它,另一个不允许。我有一个 logger.info 函数调用 console.log(所以是一个包装器),它允许我轻松地启用或禁用整个应用程序的日志记录。我并不是说这是最佳实践,只是我做过的一些事情。这也使得与另一个 logger(如 https://github.com/krakenjs/beaver-logger)更容易集成。 - PatS
多年前,当人们仍在使用IE时,在您的代码中使用console.log()会导致JavaScript在该行停止执行(崩溃)。这是因为IE将console.log()视为错误,除非开发人员工具已打开。当然,我不认识任何仍在使用IE的人,所以现在只是一种风格/口味/观点问题,个人认为。 - slebetman

10
将以下内容添加到您的 tslint.json 中。
{
   "rules": {
      "no-console": {
         "severity": "warning",
      } 
   }
}

8
我处理tslint "no-console"规则的方式是针对每个文件,我发现这种方式在开发阶段是方便和隔离的。
只要我需要使用第一个console.log(); ,Visual Studio Code会显示添加选项:
// tslint:disable-next-line: no-console console.log();
所以我只需删除“-next-line”,这个命令就会覆盖整个文件。
// tslint:disable: no-console console.log();
我希望这能作为禁用整个应用程序功能的替代方案。
RON

8
这是正确的语法来定义 no-console 规则(或任何其他规则),但只有警告而不是错误(显然,将选项更改为您想要的任何内容)。
"no-console": {
    "severity": "warning",
    "options": [
        "log",
        "error",
        "debug",
        "info",
        "time",
        "timeEnd",
        "trace"
    ]
},

这个警告完美地起作用。顺便说一下,在tslint文档中没有记录这一点。 - nelson6e65

4

如果 // tslint:disable-next-line:no-console 不起作用,请尝试使用 // eslint:disable-next-line:no-console


tslint:disable-next-line:no-console 对我很有效 - Alexey Muravyov

2

一个绕过代码检查工具的不规范做法:

const { log } = console; log('Hello linter'); // TODO: remove

2
在TypeScript 3版本中,更新tslint.json文件中的规则键如下:
"no-console": [
    true,
    "debug",
    "time",
    "timeEnd",
    "trace"
],

这样,您只需指定不使用debug、time、timeEnd和trace,如果您的默认tslint列表中包含“info”,只需将其删除即可。


1
这是文档中所述的正确做法:https://palantir.github.io/tslint/rules/no-console/ - Christopher Grigg

0

根据文档:https://eslint.org/docs/user-guide/getting-started#configuration

  • "off" 或 0 - 关闭规则
  • "warn" 或 1 - 将规则作为警告打开(不影响退出代码)
  • "error" 或 2 - 将规则作为错误打开(退出代码将为1)

顺便说一下,您的正确设置应该是

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

0

语法已更改!

对于下一行异常,需要在 no-console 前加一个空格:// eslint-disable-next-line no-console

对于文件异常,它也必须位于多行注释语法内:/* eslint-disable no-console */

这也可能取决于某些配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接