【问题标题】:ESLint output to file and console at the same timeESLint 同时输出到文件和控制台
【发布时间】:2020-02-11 22:56:48
【问题描述】:

默认情况下,ESLint 会将其结果打印到标准输出。如果添加输出选项,它会将输出重定向到文件。到目前为止一切都很好,但是有没有办法做到这两点?

我们需要 GitLab 的文件输出来解析结果并在 UI 中显示它们,但是我们的一些开发人员懒得改变他们做事的方式,而是想要查看输出。

是否有一种开箱即用的方式来获得两者,或者是我唯一的机会使用他们文档中提到的 CLIEngine 节点内容编写我自己的脚本来运行 ESLint?

提前致谢。

【问题讨论】:

    标签: node.js command-line-interface eslint


    【解决方案1】:

    所以,经过一番研究,我想我自己找到了答案。

    基本上有两种方法可以同时在控制台和文件上输出:

    1. 最简单的方法是使用这个名为 ESLint Output 的 JavaScript 包。
    2. 更复杂的方法基本上是自己构建所说的包。您必须创建一个 JavaScript 文件,而不是 ESLint 并在该文件中导入/需要 ESLint。通过将 ESLint 作为包导入而不是直接运行它,您可以使用 Node 的 CLIEngine 对要检查的文件运行 ESLint,并将输出存储在变量中。然后可以将该输出保存到文件中并再次打印。

    希望没有人感到惊讶,选项 2 中描述的方法正是选项 1 中的包所做的,它将它包装在一个易于理解的配置文件中,并将从默认的 eslintrc 文件中为您收集所有配置。

    【讨论】:

      【解决方案2】:

      只需将 ESLint 结果写入文件,然后使用ESLint-formatters 之一读取它:

      npx eslint ./cartridges/ --format json --output-file result.json
      node -p "require('./node_modules/eslint/lib/formatters/unix.js')(require('./result.json'))"
      

      【讨论】:

        【解决方案3】:

        您可以通过eslint-html-reporter 实现它。当您希望从终端获得结果 并且 将其导出到 .html 文件中时,终端的输出会变得不那么漂亮(如果是仅在其中一个中完成),但可以通过运行:

        ./node_modules/.bin/eslint --ext .jsx . & ./node_modules/.bin/eslint --ext .jsx . -f node_modules/eslint-html-reporter/reporter.js -o report.html(在此示例中,它会递归查找项目文件夹中的 .jsx 文件)。

        【讨论】:

        • 感谢回复,但文件输出需要为JUnit风格的XML,以便Gitlab解析测试结果。如果我们将花哨的 HTML 输出添加到文件中,我们还有另一个问题需要创建两个单独的文件输出,每个输出具有不同的格式。
        【解决方案4】:

        我遇到了同样的问题,通过运行两次 eslint 解决了问题。

        创建了一个shell脚本
        #!/usr/bin/env bash
        node_modules/.bin/eslint --quiet \
            --max-warnings 100 \
            -o eslint-output.$1 \
            -f $1 '*/**/*.{js,ts,tsx}' 
        

        然后通过 Jenkins 调用脚本两次:

        steps {
            echo 'Rodando ESLint...' 
            sh("""
                yarn install
                ./eslint.sh junit || true
                ./eslint.sh codeframe || true
            """)
        
            junit(
                allowEmptyResults: true,
                healthScaleFactor: 0.0,
                testResults: 'eslint-output.junit'
            )
        } 
        

        【讨论】:

        • 但是现在你在管道中的 ESLint 步骤使用了两倍的时间和资源,这只是为了将已经存在的输出重新格式化为机器可读格式,如果 ESLint 需要,可以很容易地转换为这两种格式到。
        猜你喜欢
        • 2020-04-10
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 2017-03-18
        相关资源
        最近更新 更多