2017-06-02 83 views
1

我最近將npm更新爲v5.0.1(來自4的最後一個版本),並且它一直是災難性的。在NPM v5.0.1升級後找不到模塊'fs.realpath'

無論如何,我堅持在這一點上。任何Node.js應用程式我嘗試運行完成的「故宮安裝」很好,但是當開始輸出:

module.js:471 
    throw err; 
    ^

Error: Cannot find module 'fs.realpath' 
    at Function.Module._resolveFilename (module.js:469:15) 
    at Function.Module._load (module.js:417:25) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/home/user/back/node_modules/glob/glob.js:44:10) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 
npm ERR! code ELIFECYCLE 
npm ERR! errno 1 

注意這個相同的應用程序將運行在MacOS很好,但在Ubuntu 16.04.2 LTS它給人的以上錯誤。

我已經刪除了兩臺機器上的node_modules目錄並重新運行,macOs正常工作,Ubuntu失敗。

node -v: v6.10.3 

...對於兩臺機器。

npm -v: 5.0.1 

這也表明我看看日誌(/home/user/.npm/_logs/2017-06-02T23_19_59_859Z-debug.log),但它提供了資料就更少。這裏的報道存在錯誤:

13 info lifecycle [email protected]~start: Failed to exec start script 
14 verbose stack Error: [email protected] start: `tsc && npm run moveassets && NODE_ENV=production forever start -a -l back.log -e back-err.log ./build/www.js ` 
14 verbose stack Exit status 1 
14 verbose stack  at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/lib/utils/lifecycle.js:283:16) 
14 verbose stack  at emitTwo (events.js:106:13) 
14 verbose stack  at EventEmitter.emit (events.js:191:7) 
14 verbose stack  at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/lib/utils/spawn.js:40:14) 
14 verbose stack  at emitTwo (events.js:106:13) 
14 verbose stack  at ChildProcess.emit (events.js:191:7) 
14 verbose stack  at maybeClose (internal/child_process.js:886:16) 
14 verbose stack  at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5) 

注意,直到NPM的致命升級到V5.0.1,它在兩臺機器上運行良好。

有問題的更新隔離:

看來它不是操作系統版本,但事實上,Mac系統正在生成程序包lock.json文件和Ubuntu是消費它,它的基礎是從安裝。如下所述,如果你刪除文件和rm -r node_modules文件夾,你可以安裝,它會一切正常(但顯然,你不會得到版本鎖定的好處)。

我認爲這只是當前版本NPM的一個錯誤。很公平,這是一個很大的變化,完成後會是一個很好的功能。

+0

你嘗試過做一個'NPM緩存clean'? – Joe

+0

heh - 在NPM v5.0.1中運行。它會告訴你,緩存現在是完美的,你永遠不需要再次清理它。我已經看到,這是不正確的。你仍然可以通過'npm cache clean --force'來實現,這沒有幫助。 如果你還沒有升級到v5.0.1,我建議不要這樣做。查看GitHub上的問題列表。它不是很好。 – WillyC

回答

5

如果

rm -rf node_modules 

然後再次做

npm install 

,它的工作原理。

注意:我也刪除了npm鎖定文件。

更新:
(在考慮服用評論)

rm -rf node_modules 
rm package-lock.json 
npm install 
+0

通過NPM鎖定文件,你的意思是'package-lock.json'嗎?如果是這樣,那麼是的,我發現我也可以通過這樣做來克服它。該文件應該確保提交系統和目標系統之間的版本對等的保證(如果我理解正確的話),顯然它沒有這樣做。我想這只是NPM v5目前的一個bug。這是一個好主意,所以希望它能解決問題! – WillyC

+0

我認爲你應該更新你的答案來說明具體的文件,但實際上這會讓你過去! – WillyC

+1

對於任何閱讀本文的人,我只會補充一點,那就是對於最新的NPM版本,如果包鎖文件存在,我從來沒有正確運行npm install。我從不檢查它,並在運行任何npm安裝操作之前刪除它。任何時候npm都會更新,我會再次嘗試它,並且總是失敗。具有諷刺意味的是,它指示你檢查文件,如果你的項目不是非常簡單,這將會導致幾乎一定的厄運。 – WillyC