2015-04-15 88 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