npm run <cmd>工作缓慢

我曾经通过Makefile运行各种命令,但是对于nodejs项目,package.json是这个东西的更合适的地方。

通过npm运行命令与命令时间执行相比效果很好但非常慢。

$ time ./node_modules/.bin/jshint . && ./node_modules/.bin/jscs . real 0m0.759s user 0m0.524s sys 0m0.085s No code style errors found. $ time npm run lint > @ lint /path/to/project > jshint . && jscs . No code style errors found. real 0m2.246s user 0m1.637s sys 0m0.277s 

有可能加快速度?

UPD。 我的package.json:

 { "devDependencies": { "jscs": "^1.12.0", "jshint": "^2.6.3" }, "scripts": { "lint": "jshint . && jscs ." } } 

UPD2。 我以错误的方式衡量时间。 甘特在他的评论中指出了这一点。 现在两次看起来相似(100毫秒差异)。

 $ time sh -c './node_modules/.bin/jshint . && ./node_modules/.bin/jscs .' No code style errors found. real 0m1.704s user 0m1.245s sys 0m0.177s $ time npm run lint > @ lint /path/to/project > jshint . && jscs . No code style errors found. real 0m1.822s user 0m1.621s sys 0m0.198s 

这不是npm的错,实际上它甚至更准确地衡量时间。

让我们看看你做了什么。

time npm run lint会调用时间,然后按顺序调用你的任务。 time将停止npm已经退出所需的时间,这将是当你的任务完成运行。 这里只有轻微的开销,脚本按预期工作。

time ./node_modules/.bin/jshint . && ./node_modules/.bin/jscs . 不过会调用time ,这会调用jshint 。 一旦jshint退出,时间也将退出, jscs将运行没有。 这也是为什么在你的例子中输出的顺序是混合起来的。

要在没有npm的情况下获得准确的时间测量结果,请尝试time sh -c './node_modules/.bin/jshint . && ./node_modules/.bin/jscs .' time sh -c './node_modules/.bin/jshint . && ./node_modules/.bin/jscs .'