2015-04-15 54 views
4

我曾经通过Makefile运行各种命令,但是对于nodejs项目,package.json是一个比较合适的地方。npm run <cmd>工作慢

与命令时间执行相比,通过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。我以错误的方式测量时间。甘特在他的评论中指出了这一点。现在两次看起来都差不多(100ms的差异)。

$ 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 
+0

显示您的package.json – Gant

+0

相关的部分只是把它添加到问题的描述。 – Alexander

回答

6

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

让我们看看你做了什么。

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

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

+0

哦,这是我的错。谢谢。现在我看到npm仅延迟了100ms。这是可以忍受的。 – Alexander