使用 Node 8.9.4 LTS 安装 Sails.js 依赖项时,NPM“ENOENT:没有此类文件或目录错误”

Posted

技术标签:

【中文标题】使用 Node 8.9.4 LTS 安装 Sails.js 依赖项时,NPM“ENOENT:没有此类文件或目录错误”【英文标题】:NPM "ENOENT: no such file or directory error" when installing Sails.js dependencies with Node 8.9.4 LTS 【发布时间】:2018-07-01 06:35:44 【问题描述】:

我最近将我的计算机升级到最新的 LTS 版本的 Node 和 NPM:

Node.js 8.9.4 NPM 5.6.0

我有一个 Sails.js 0.12.14 应用程序,我正在尝试使用 npm install 安装 NPM 依赖项,但是当我这样做时,我收到以下错误:

➜  web-service git:(feature/auth) ✗ npm install
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/package.json'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/README.md'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/LICENSE'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/index.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/pako-660dbb41/CHANGELOG.md'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/camelCase.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/uniqueId.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/bindKey.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/unnest.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/bindAll.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/unset.js'
// a bunch of similar Lodash errors removed from here
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/T.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/zipWith.js'
WARN tar ENOENT: no such file or directory, open '/Users/Nag/Code/project/web-service/node_modules/.staging/lodash-6e6c9f2a/fp/lastIndexOfFrom.js'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: oauth-sign@0.8.2 (node_modules/oauth-sign):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/oauth-sign-b13c86db'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: mkdirp@0.5.1 (node_modules/mkdirp):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/mkdirp-c94c8047'
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: minimist@0.0.8 (node_modules/mkdirp/node_modules/minimist):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: Cannot cd into '/Users/Nag/Code/project/web-service/node_modules/.staging/minimist-ba966a6e'

npm ERR! path /Users/Nag/Code/project/web-service/node_modules/.staging/sails-02afd14e/node_modules/@sailshq/body-parser
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall rename
npm ERR! enoent ENOENT: no such file or directory, rename '/Users/Nag/Code/project/web-service/node_modules/.staging/sails-02afd14e/node_modules/@sailshq/body-parser' -> '/Users/Nag/Code/project/web-service/node_modules/.staging/@sailshq/body-parser-6d1e8405'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/Nag/.npm/_logs/2018-01-22T14_40_13_889Z-debug.log

我似乎无法弄清楚发生了什么,也无法在网上其他任何地方找到合适的答案。我什至跑了npm cache clean --forcerm -rf node_modules 并重试了类似的错误。当我在 Node ~6 上时它似乎工作正常,但在升级到 Node 8.9.4 和 NPM 5.6.0 后,它就不会安装我的依赖项。我该如何解决这个问题?

【问题讨论】:

While doing npm install getting an error as "No such file or directory open"的可能重复 【参考方案1】:

尝试删除package-lock.json 文件。

【讨论】:

我也有同样的问题,但是没有 package-lock.json 很奇怪。我以为package-lock.json 会自行修复,而不是给出这样一个神秘的间接错误,但这确实修复了那个错误 o_o。 我们得到了同样的结果——删除 package-lock 确实“修复”了问题,但阻止了我们使用锁。我认为这与映射文件系统权限有关。 不错!你能详细说明为什么这是解决方案吗?我的意思是这里到底有什么问题,为什么删除这个文件有帮助? 不删除 package-lock.json 会破坏拥有 package-lock.json 的目的吗?【参考方案2】:

没有权限,没有网络问题,这只是npm 的一般问题。 我用yarn解决了这个问题。

yarn install

或者你可以使用no-optional标志。

npm install --no-optional

【讨论】:

【参考方案3】:

对我来说,事实证明这些错误隐藏了真正的潜在问题,即我的第三方 npm 存储库 (azure devops) 的凭据已过期。我不得不重新运行 vsts-npm-auth -config .npmrc 来更新我的 .npmrc 文件中的令牌。

【讨论】:

谢谢,过期的令牌也是我的原因 这个答案实际上是唯一真正解决问题的答案,而不仅仅是猜测解决策略!【参考方案4】:

删除并重新生成“package-lock.json”通常可以解决这个问题,但这本身就有风险,因为您可能一次升级多个包。

在我的例子中,package-lock.json 引用了一个特定的包版本,它在依赖关系中有 5 个级别。该版本不再存在于 npm 注册表中,因此导致安装中断。我必须找出是哪个包引入了这种依赖关系,然后升级那个包来解决问题。

【讨论】:

您能否详细说明您是如何进行此过程的? 现在我不记得是否有特定错误导致我使用有问题的包,但有一些故障排除步骤和工具可能会有所帮助:首先试试这个:删除“Node_modules”。再次运行“npm i”。检查日志以了解有关特定软件包的问题的任何迹象。有用的命令:npm ls - 生成可视依赖树(包括子依赖)docs.npmjs.com/cli/ls.html npm audit - 查找易受攻击的依赖docs.npmjs.com/cli/audit 最后一招:删除 package-lock.json(或 yarn lock)并运行'npm i'。 【参考方案5】:

就我而言,我尝试删除 package-lock.json,清除并验证 npm 缓存,删除 node_modules,甚至停止杀毒软件(W10 机器),但仍然出现此错误。

我通过在npm install 之前运行npm update 以某种方式修复它,这会创建一个新的package-lock.json

del /f package-lock.json
rd /s /q node_modules
npm cache clean
npm cache verify
npm update
npm install

【讨论】:

一起搜索了几个小时后,这是唯一对我有用的解决方案【参考方案6】:

可能是缓存有问题,请尝试验证缓存。

npm cache verify

【讨论】:

这解决了我的问题,不知道为什么...【参考方案7】:

只需删除package-lock.json 文件,然后安装所需的软件包。一切都会好起来的。

【讨论】:

【参考方案8】:

删除节点模块

只需删除 package-lock.json 文件,然后使用 npm install 安装您想要的软件包。一切都会好起来的。

rm -rf node_modules

rm package-lock.json

npm install

如果问题仍然存在,请检查您是否安装了任何软件包的全球版本。 如果您的包的全局版本与包的本地版本发生冲突,则可能会发生这种情况。

【讨论】:

【参考方案9】:

我为此苦苦挣扎了一段时间,似乎与以下有关。

假设您有 3 个模块,A、B 和 C

模块 A 直接包含 B 和 C 模块 B 还包括模块 C,在它的 package.json 依赖项中。

如果模块 A 中的 package.json 依赖项如下所示:

"dependencies": 
     "C": "^1.0.0",
     "B": "^1.1.0"

你会得到上面提到的错误,ENOENT, blah, blah in .staging

另一方面,如果您首先使用嵌套的 include 包含模块,例如:

"dependencies": 
     "B": "^1.1.0",
     "C": "^1.0.0"

错误消失了。这似乎是 npm 中具有嵌套依赖项的错误,并且错误消息和日志的描述性不是很好。检查您的依赖关系树,看看您是否有描述的案例,如果有,那就是您的问题。

【讨论】:

顺便说一句,完成上述操作后,我的 package-lock.json 文件现在可以工作了。在我确定我的所有依赖项都是这样排序之前,我不再需要删除我的 package-lock.json 文件来让它工作。 您能否提供有关如何进行此过程的更多详细信息?您如何发现哪些模块依赖于哪些等? 在我的团队中的一些人添加了更多依赖项之后,上面的内容工作了一段时间,然后又回来了。问题之一似乎是 npm 异步安装依赖项,并且根据您嵌套依赖项的方式,它会在随机位置失败(因为异步线程之间的竞争条件)。例如,在上面的示例中,如果模块 C 开始安装,然后 B 开始安装,B 将失败,因为它正在尝试安装 C,而 C 也是由于 A 的结果而安装的。我永远无法让 npm 100% 工作当时,我改用了yarn,从那以后就没有问题了。【参考方案10】:

除了删除package-lock.json,我还必须删除node_modules,这样package-lock.json才能以正确的方式生成

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

【讨论】:

【参考方案11】:

由于 npm 缓存问题,我也出现了同样的错误。运行

npm install --cache /tmp/empty-cache

【讨论】:

【参考方案12】:

当我在 Node.js 12 上尝试针对使用 Node.js 16 生成的 package-lock.json 运行 npm install 时,这发生在我身上。

切换回 Node.js 16 解决了这个问题:

nvm use 16

当然,删除package-lock.json 也会为我解决问题。

【讨论】:

【参考方案13】:

如果您的工作文件夹下没有package-lock.jsonpackage.json,请先致电npm init

【讨论】:

以上是关于使用 Node 8.9.4 LTS 安装 Sails.js 依赖项时,NPM“ENOENT:没有此类文件或目录错误”的主要内容,如果未能解决你的问题,请参考以下文章

升级node与npm

debian安装node-js环境

node不要使用最新版本,使用LTS版本

node.js和npm离线安装

Node.js学习12~Ubuntu 20.04.4 LTS安装Node

nodejs v8.9.4 安装