【问题标题】:Eslint: How to disable "unexpected console statement" in Node.js?Eslint:如何在 Node.js 中禁用“意外的控制台语句”?
【发布时间】:2016-03-16 21:26:30
【问题描述】:

我正在使用带有 Sublime Text 3 的 eslint,我正在写 gulpfile.js

/*eslint-env node*/
var gulp = require('gulp');

gulp.task('default', function(){
    console.log('default task');
});

但 eslint 一直显示错误:“错误:意外的控制台语句。(无控制台)”

我找到了official document here,但我仍然不知道如何禁用它。

/*eslint-env node*/
var gulp = require('gulp');

/*eslint no-console: 2*/
gulp.task('default', function(){
    console.log('default task');
});

也不行。

我的 Sublime Text 3 插件:SublimeLinter 和 SublimeLinter-contrib-eslint。

这是我的.eslintrc.js 文件:

module.exports = {
    "rules": {
        "no-console":0,
        "indent": [
            2,
            "tab"
        ],
        "quotes": [
            2,
            "single"
        ],
        "linebreak-style": [
            2,
            "unix"
        ],
        "semi": [
            2,
            "always"
        ]
    },
    "env": {
        "browser": true,
        "node": true
    },
    "extends": "eslint:recommended"
};

【问题讨论】:

    标签: javascript node.js sublimetext3 sublime-text-plugin eslint


    【解决方案1】:

    我的 2 美分贡献:

    除了删除控制台警告(如上所示),最好从 PROD 环境中删除您的日志(出于安全原因)。 我发现这样做的最好方法是将其添加到 nuxt.config.js

      build: {
       terser: {
          terserOptions: {
            compress: {
              //this removes console.log from production environment
              drop_console: true
            }
          }
        }
      }
    

    它是如何工作的:Nuxt 已经使用 terser 作为缩小器。此配置将强制 terser 在压缩期间忽略/删除所有控制台日志命令。

    【讨论】:

      【解决方案2】:

      在“规则”中, "no-console": [false, "log", "error"]

      【讨论】:

        【解决方案3】:

        您也可以允许,而不是关闭“无控制台”。在 .eslintrc.js 文件中放入

          rules: {
            "no-console": [
             "warn",
             { "allow": ["clear", "info", "error", "dir", "trace", "log"] }
            ]
          }
        

        这将允许您执行console.logconsole.clear 等而不会引发错误。

        【讨论】:

        • 需要是 JSON,而不是 JavaScript 对象
        • .eslintrc.js是JS文件,所以不需要是JSON。
        【解决方案4】:

        在你的文件目录下创建一个.eslintrc.js,在里面放入如下内容:

        module.exports = {
            rules: {
                'no-console': 'off',
            },
        };
        

        【讨论】:

        • 好吧,根据 eslint 插件的官方 github 页面 (github.com/roadhump/…),将 .eslintrc 文件放入您的项目文件夹应该可以解决问题...继续调试它,我会建议尝试从命令行运行 eslint。如果您没有安装 node.js,只需安装它,然后从控制台/命令提示符运行 npm install eslint,然后在控制台/命令提示符中导航到您的项目文件夹,然后运行 ​​eslint .
        • 当文件被称为 .eslintrc.json 时它可以工作(对我来说)
        • 或者,您可以写"rules": {"no-console": "off"} 以减少神秘感。 "warn""error" 是另外两个选项。
        • ESLint 配置文件过去只是.eslintrc,但现在已弃用,应根据使用的格式命名,例如.eslintrc.js.eslintrc.yaml
        • vue-cli 3 中不起作用:查看答案stackoverflow.com/a/53333105/150370
        【解决方案5】:

        使用窗口对象

        window.console.log("..")

        【讨论】:

          【解决方案6】:

          如果您在根据文档配置 package.json 后仍然遇到问题(如果您选择使用 package.json 来跟踪而不是单独的配置文件):

          "rules": {
                "no-console": "off"
              },
          

          它仍然不适合你,别忘了你需要回到命令行并再次执行 npm install。 :)

          【讨论】:

          • 有趣,这就是发生在我身上的事。为什么我们需要再次运行 npm install?或者也许我只需要使用 npm run serve 重新启动。
          【解决方案7】:

          对于 vue-cli 3 打开package.json 并在eslintConfig 部分下将no-console 放在rules 下并重新启动开发服务器(npm run serveyarn serve

          ...
          "eslintConfig": {
              ...
              "rules": {
                "no-console": "off"
              },
              ...
          

          【讨论】:

          【解决方案8】:

          在我的vue 项目中,我这样解决了这个问题:

          vim package.json
          ...
          "rules": {
              "no-console": "off"
          },
          ...
          

          ps : package.json is a configfile in the vue project dir, finally the content shown like this:

          {
            "name": "metadata-front",
            "version": "0.1.0",
            "private": true,
            "scripts": {
              "serve": "vue-cli-service serve",
              "build": "vue-cli-service build",
              "lint": "vue-cli-service lint"
            },
            "dependencies": {
              "axios": "^0.18.0",
              "vue": "^2.5.17",
              "vue-router": "^3.0.2"
            },
            "devDependencies": {
              "@vue/cli-plugin-babel": "^3.0.4",
              "@vue/cli-plugin-eslint": "^3.0.4",
              "@vue/cli-service": "^3.0.4",
              "babel-eslint": "^10.0.1",
              "eslint": "^5.8.0",
              "eslint-plugin-vue": "^5.0.0-0",
              "vue-template-compiler": "^2.5.17"
            },
            "eslintConfig": {
              "root": true,
              "env": {
                "node": true
              },
              "extends": [
                "plugin:vue/essential",
                "eslint:recommended"
              ],
              "rules": {
                  "no-console": "off"
              },
              "parserOptions": {
                "parser": "babel-eslint"
              }
            },
            "postcss": {
              "plugins": {
                "autoprefixer": {}
              }
            },
            "browserslist": [
              "> 1%",
              "last 2 versions",
              "not ie <= 8"
            ]
          }
          

          【讨论】:

          • 如果通过vue-clivue ui 生成vue 项目并且它包含vue.config.jspackage.json,这将很有帮助。编辑package.json
          【解决方案9】:

          2018 年 10 月,

          只是做:

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

          其他人用

          回答
          // eslint-disable-next-line no-console
          

          不起作用!

          【讨论】:

            【解决方案10】:

            package.json 中,您会找到 eslintConfig 行。您的“规则”行可以像这样进入:

              "eslintConfig": {
               ...
                "extends": [
                  "eslint:recommended"
                ],
                "rules": {
                  "no-console": "off"
                },
               ...
              },
            

            【讨论】:

              【解决方案11】:

              您应该添加一条规则并添加您的环境:

              {
                "rules": {
                  "no-console": "off"
                },
                "env": {
                  "browser": true
                }
              }
              

              您可以添加其他环境。

              【讨论】:

                【解决方案12】:

                如果您只想为一行禁用规则,则以下内容适用于 VSCode 中的 ESLint。

                禁用下一行:

                // eslint-disable-next-line no-console
                console.log('hello world');
                

                禁用当前行:

                console.log('hello world'); // eslint-disable-line no-console
                

                【讨论】:

                  【解决方案13】:

                  如果你只想禁用规则一次,你想看看Exception's answer

                  您可以通过仅禁用一行的规则来改善这一点:

                  ...在当前行:

                  console.log(someThing); /* eslint-disable-line no-console */
                  

                  ...或在下一行:

                  /* eslint-disable-next-line no-console */
                  console.log(someThing);
                  

                  【讨论】:

                    【解决方案14】:

                    更好的选择是根据节点环境使 console.log 和调试器语句的显示有条件。

                      rules: {
                        // allow console and debugger in development
                        'no-console': process.env.NODE_ENV === 'production' ? 2 : 0,
                        'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
                      },
                    

                    【讨论】:

                    • 控制台消息仍在生产环境中打印
                    • 如果 .eslintrc 在 JSON 而不是常规 js 文件中,这将如何工作?
                    【解决方案15】:

                    我正在使用 Ember.js,它会生成一个名为 .eslintrc.js 的文件。将"no-console": 0 添加到规则对象为我完成了这项工作。更新后的文件如下所示:

                    module.exports = {
                      root: true,
                      parserOptions: {
                        ecmaVersion: 6,
                        sourceType: 'module'
                      },
                      extends: 'eslint:recommended',
                      env: {
                        browser: true
                      },
                      rules: {
                        "no-console": 0
                      }
                    };
                    

                    【讨论】:

                      【解决方案16】:

                      如果你在本地项目下安装 eslint,你应该有一个目录 /node_modules/eslint/conf/ 并在该目录下有一个文件 eslint.json。您可以编辑文件并使用值“off”修改“no-console”条目(尽管也支持 0 值):

                      "rules": {
                          "no-alert": "off",
                          "no-array-constructor": "off",
                          "no-bitwise": "off",
                          "no-caller": "off",
                          "no-case-declarations": "error",
                          "no-catch-shadow": "off",
                          "no-class-assign": "error",
                          "no-cond-assign": "error",
                          "no-confusing-arrow": "off",
                          "no-console": "off",
                          ....
                      

                      我希望这个“配置”可以帮助到你。

                      【讨论】:

                      【解决方案17】:

                      您应该更新 eslint 配置文件以永久修复此问题。否则,您可以暂时启用或禁用控制台的 eslint 检查,如下所示

                      /* eslint-disable no-console */
                      console.log(someThing);
                      /* eslint-enable no-console */
                      

                      【讨论】:

                      • 如何配置我的.eslintrc,请告诉我?
                      • 不需要添加两行。只需将之前的 console.log 放入以下异常就足够了:eslint-disable-next-line no-console
                      • 感谢@JonathanBrizio,这正是我想要的。调试某些东西的快速而肮脏的解决方案。完成后,我将删除 console.log 行。我不想永久修改 eslint 规则。
                      猜你喜欢
                      • 2018-01-06
                      • 1970-01-01
                      • 2021-11-27
                      • 2016-12-20
                      • 2018-04-10
                      • 1970-01-01
                      • 2020-12-27
                      • 1970-01-01
                      • 2020-09-13
                      相关资源
                      最近更新 更多