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 .'