2013-11-23 48 views
16

我一直認爲npm test命令剛剛啓動了我會寫的package.json裏面的腳本:{test:...} section。但是當它不起作用時,我有這個奇怪的錯誤。「npm test」如何工作?

所以,我有這一塊配置的的package.json

"scripts": { 
    "start": "node index.js", 
    "test": "mocha tests/spec.js" 
} 

當我嘗試運行測試中,我輸入端子npm test和過這樣的錯誤:

module.js:340 
    throw err; 
     ^
Error: Cannot find module 'commander' 

但一切當我輸入mocha tests/spec.js時是OK。任何想法是爲什麼?

UPDATE:

我試圖安裝指揮官,我有一個錯誤找不到模塊「水珠」。安裝水珠後,我有錯誤:無法找到模塊「../」

但實際上,問題是,爲什麼我有這些錯誤,爲什麼運行mocha tests/spec.js當一切OK?

+1

指揮官在你的文件系統中安裝了哪裏? – rninty

+0

它確實調用了package.json的scripts.test屬性中指定的命令,但它也設置了某些環境變量,例如PATH,因此您可以引用僅存在於node_modules目錄中但不是全局安裝的命令。 – Brandon

+0

請確保將commander添加到您的package.json和'npm install'中::) –

回答

10

您可能安裝了兩個版本的摩卡:一個是全局的(npm install -g mocha),另一個是本地的,似乎已經損壞。

當您通過npm運行腳本,無論是作爲npm run-script <name>或類似npm testnpm start定義的快捷鍵,您的當前包目錄的bin目錄放置在您的路徑的前面。對於您的軟件包,可能是./node_modules/.bin/,其中包含指向您包的可執行腳本mocha的鏈接。

rm -rf node_modules/mocha npm install --save-dev mocha

這應該讓你摩卡工作本地副本與它的依賴性(司令等:

則很可能通過刪除本地摩卡與--save-dev的重新安裝解決這個問題)安裝。

+0

謝謝!我發現這個答案是因爲'npm help test'說:'如果提供了一個包,就運行一個包的「測試」腳本。「但是並沒有說出」「測試腳本」在文件系統上的位置!很高興知道它在我的「當前包目錄的'bin'目錄中」,就像你在這裏說的那樣! –