6

阅读本文后,我正在尝试使用 npm 作为任务运行器/构建工具:

如何使用 npm 作为构建工具

虽然我取得了一些成功,但我仍然坚持一件事。在运行 JSLINT、JSHINT 或 ESLINT 等命令行全局工具时,npm 将始终在控制台窗口中显示 Exit 1 代码:

在此处输入图像描述

如您所见,该命令运行良好,但 npm 将其视为错误并显示错误日志信息。这是正常的和/或有没有办法为特定命令关闭它?

附加信息:这是我的 package.json 配置中的脚本块:

“脚本”:{“开始”:“节点./src/server/index.js”,“测试”:“”,“lint”:“eslint index.js”}

然后从 npm cli 我输入:

npm run lint

这将执行 package.json 文件中带有标签的脚本:'lint'

4

4 回答 4

3

我用这个:

"scripts": {
   "start": "node ./src/server/index.js",
   "lint": "eslint index.js || exit 0"
}

问候!

于 2016-09-12T10:37:43.800 回答
2

Since there are validation errors, eslint exists with an Exit code 1, which makes npm believe that there was an error during it's execution.

If you're using linux, you can use this trick to always return an Exit code 0 :

"scripts": { "start": "node ./src/server/index.js", "test": "", "lint": "eslint index.js; true" }
于 2015-01-27T00:05:02.560 回答
2

NPM 脚本被设计为故意以这种方式工作,因此退出代码 1 或 2(除 之外的任何值0)将阻止 post 任务运行,就像它在您的操作系统上运行的方式一样。

使用--silent标志一种选择,但如果脚本存在其他问题,则可能会成为问题,并且当您的构建开始失败而没有任何 lint/test 错误时,您最终会撞到墙上。

最好的办法是……配置您的进程,使其在您不希望它输出的情况下不会输出错误退出代码。在这种情况下...根据您的 eslint 配置,您会合法地弹出一些错误。这将导致错误退出代码,并且(理所当然地)阻止下一个任务运行。当您使用 npm 脚本时,这实际上非常有用,因为当您知道有错误时,您可以防止不必要地运行测试/构建步骤。

因此,在这种情况下,您希望将一个.eslintrc文件添加到您的项目中,并指定一些规则来处理 linting 错误以及 npm 错误。

我在.eslintrc下面发布了一个快速示例文件。在命令行上运行eslint时,它会自动检测任何.eslintrc.eslintignore文件,并遵守它们的配置。

下面的示例将清除您的 linting 错误,但请记住,它会更改 eslint 拾取该“触发器”时将抛出的退出代码。当我将规则更改为 时0,这意味着它在识别出该模式时不会提醒您。

您可以阅读有关使用和配置规则代码的更多信息,或者...查看我创建的使用 npm 作为构建工具并包括 eslint 使用的种子项目:react-flux-npm-automation

// /path/to/project/.eslintrc
{
    "parser": "babel-eslint",
    "env":{
        "browser":true,
        "node":true,
        "es6":true
    },
    "rules": {
        "strict":0,
        "quotes":0,
        "no-unused-vars":0
    }
}
于 2015-05-10T16:10:58.533 回答
1

我找到了解决此问题的方法。在脚本块中,我使用测试脚本调用带有 --silent 标志的 lint 的 npm 命令:

"scripts": {
"start": "node ./src/server/index.js",
"test": "npm run-script --silent lint",
"lint": "eslint index.js"}

然后在命令行上我可以输入:

npm run test

现在它正在工作而不显示错误日志。

于 2015-01-27T00:14:51.340 回答