使用NPM作为一个任务运行/构建工具 - 有一些CLI模块

问题描述:

我试图使用NPM作为一个任务运行/看完这篇文章后构建工具的问题:使用NPM作为一个任务运行/构建工具 - 有一些CLI模块

How to use npm as a build tool

而我我取得了一些成功,我陷入了一件事。当运行像的JSLint,JSHINT,或ESLINT一个命令行的全球工具,故宫将始终显示在控制台窗口中的1号出口代码:

enter image description here

正如你所看到的,命令工作正常,但NPM将其视为错误并显示错误日志信息。这是正常的和/或有办法关闭特定的命令?

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

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

然后从NPM CLI I型:

npm run lint 

这将执行与标签的package.json文件中找到的脚本: 'lint'

+0

这应该是一个伟大的读取你:http://substack.net/task_automation_with_npm_run – naomik 2015-01-27 00:38:20

由于存在验证错误,eslint存在退出代码1,这使得npm认为在执行过程中出现错误。

如果你使用Linux,你可以使用这一招总是返回退出代码0:

"scripts": { "start": "node ./src/server/index.js", "test": "", "lint": "eslint index.js; true" } 
+0

我使用cli,以便真正的标志不起作用的情况下。 – u84six 2015-01-27 00:12:29

+0

对不起,我看到这是一个Linux命令。我的开发环境是Windows,所以我认为最好使用--silent标志。看到我的答案。 – u84six 2015-01-27 00:18:29

我已经找到一个解决这个问题。在脚本块中,我使用的测试脚本调用NPM命令皮棉与--silent标志:

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

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

npm run test 

现在是工作时不显示错误日志。

NPM脚本被设计为有意使用这种方式,以便退出代码1或2(除0以外的任何其他代码)将阻止后期任务运行,与在操作系统上运行的方式相同。

使用--silent标志一种选择,但可以成为那里有其他问题剧本的问题,你会风撞你的头靠在墙上,当你建立开始,没有任何皮棉/测试错误失败。

这里要做的最好的事情就是配置您的过程,以便在您不需要的情况下不输出错误退出代码。在这种情况下......你有一些基于你的eslint配置合法弹出的错误。这将导致错误退出代码,并(正确如此)阻止下一个任务运行。当你使用npm脚本时,这实际上是非常有用的,因为当你知道有错误时,你可以防止测试/构建步骤被不必要地运行。

因此,在这种情况下,您想要将.eslintrc文件添加到您的项目中,并指定一些既能处理linting错误也能处理npm错误的规则。

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

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

你可以阅读更多关于利用和configuring rule codes,或...看看我创建了一个种子项目,该项目使用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 
    } 
} 

我用这个:

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

问候!