【问题标题】:Cannot find module 'fs.realpath' after NPM v5.0.1 upgradeNPM v5.0.1 升级后找不到模块“fs.realpath”
【发布时间】:2017-07-14 05:18:38
【问题描述】:

我最近将 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

请注意,相同的应用程序在 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 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)

请注意,在将 NPM 升级到 v5.0.1 之前,它在两台机器上都运行良好。

发现问题的更新:

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

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

【问题讨论】:

  • 你试过npm cache clean吗?
  • 嘿 - 在 NPM v5.0.1 中运行它。它会告诉你缓存现在很完美,你再也不需要清理它了。我已经看到,这不是真的。您仍然可以使用npm cache clean --force 来实现它,但这无济于事。如果您尚未升级到 v5.0.1,我建议您不要升级。查看 GitHub 上的问题列表。它不是很好。

标签: node.js ubuntu npm


【解决方案1】:

如果你

rm -rf node_modules

然后做一个

npm install

再次,它有效。

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

更新:
(考虑评论)

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

【讨论】:

  • NPM 锁定文件是指“package-lock.json”吗?如果是这样,那么是的,我发现我也可以通过这样做来克服它。该文件应该确保提交系统和目标系统之间的版本等效(如果我理解正确的话),显然它没有这样做。我想目前这只是 NPM v5 的一个错误。这是一个好主意,所以希望它得到解决!
  • 我认为您应该更新您的答案以说明特定文件,但这确实会让您通过它!
  • 我会补充一点,对于任何阅读本文的人,直到今天在最新的 NPM 版本上,如果存在 package-lock 文件,我从来没有让 npm install 正确运行。在运行任何 npm install 操作之前,我从未将其签入并删除它。每当更新 npm 时,我都会满怀希望地再次尝试,但总是失败。具有讽刺意味的是,它会指示您签入文件,如果您的项目不是很简单,这将导致几乎肯定的厄运。
猜你喜欢
  • 1970-01-01
  • 2015-03-05
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 2015-02-26
  • 1970-01-01
相关资源
最近更新 更多