在NPM v5.0.1升级后找不到模块'fs.realpath'

Wil*_*lyC 2 ubuntu node.js npm

我最近更新了npm到v5.0.1(从最后一个版本的4),它一般都是灾难性的.

无论如何,我已经陷入了困境.我尝试运行的任何node.js应用程序都完成了'npm install',但是在启动输出时:

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
Run Code Online (Sandbox Code Playgroud)

请注意,相同的应用程序将在macOs上正常运行,但在Ubuntu 16.04.2 LTS上它会出现上述错误.

我删除了两台机器上的node_modules目录并重新运行,macOs工作正常,Ubuntu失败.

node -v: v6.10.3
Run Code Online (Sandbox Code Playgroud)

......对于两台机器.

npm -v: 5.0.1
Run Code Online (Sandbox Code Playgroud)

它还建议我查看log(/home/user/.npm/_logs/2017-06-02T23_19_59_859Z-debug.log),但它提供的信息更少.这是在那里报告的错误:

13 info lifecycle back@0.0.1~start: Failed to exec start script
14 verbose stack Error: back@0.0.1 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)
Run Code Online (Sandbox Code Playgroud)

请注意,在将NPM命名升级到v5.0.1之前,它在两台计算机上都能正常运行.

隔离问题的更新:

它似乎不是操作系统版本,但事实上macOS正在生成package-lock.json文件而Ubuntu正在使用它并基于它安装它.如下所述,如果你删除文件和rm -r node_modules文件夹,你可以安装,它将一切正常(但你不会得到版本锁定的好处,显然).

我认为这只是NPM当前版本的一个错误.很公平,这是一个很大的变化,完成后将是一个很好的功能.

小智 8

如果你

rm -rf node_modules
Run Code Online (Sandbox Code Playgroud)

然后做一个

npm install
Run Code Online (Sandbox Code Playgroud)

再次,它的工作原理.

注意:我还删除了npm锁文件.

更新:(
考虑评论)

rm -rf node_modules
rm package-lock.json
npm install
Run Code Online (Sandbox Code Playgroud)