npm 安装错误 ENOTEMPTY:目录不为空,

问题描述 投票:0回答:7

当我尝试使用

npm install
安装一些新软件包时遇到以下错误。当我执行
npm install a-new-package --save
然后删除 package-lock.json 文件以刷新所有内容时,就发生了这种情况。

npm ERR! code ENOTEMPTY
npm ERR! syscall rename
npm ERR! path /Users/memphismeng/Documents/React Programming/Foot-in-The-Door/mobile/fitd/node_modules/@babel/plugin-proposal-decorators
npm ERR! dest /Users/memphismeng/Documents/React Programming/Foot-in-The-Door/mobile/fitd/node_modules/@babel/.plugin-proposal-decorators-ysLLPQFw
npm ERR! errno -66
npm ERR! ENOTEMPTY: directory not empty, rename '/Users/memphismeng/Documents/React Programming/Foot-in-The-Door/mobile/fitd/node_modules/@babel/plugin-proposal-decorators' -> '/Users/memphismeng/Documents/React Programming/Foot-in-The-Door/mobile/fitd/node_modules/@babel/.plugin-proposal-decorators-ysLLPQFw'

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/memphismeng/.npm/_logs/2021-06-15T18_07_01_162Z-debug.log

出了什么问题?我也尝试过

npm audit fix --legacy-peer-deps
但没成功。

reactjs npm npm-install
7个回答
37
投票

可能删除

node_modules
文件夹和
package-lock.json
文件,然后重新安装
npm
即可解决您的问题。

因此,请考虑以下命令来应用上述操作:

npm remove node_modules 
npm remove package-lock.json
npm install 

7
投票

我在互联网连接缓慢且不可靠时遇到了同样的问题。我创建了这个可以与

bash
一起运行的脚本,修复了所有中断的安装:

#!/bin/bash
set -e

while true; do
  log="$HOME/.npm/_logs/`ls $HOME/.npm/_logs/ | tail -n 1`"
  echo "log: $log"
  for path in `cat "$log" | grep 'ENOTEMPTY' | grep -oE "[^']+node_modules[^']+"`; do
    echo "removing $path"
    rm -rf "$path"
  done
  if npm install; then
    break
  fi
done

基本上,我使用https://stackoverflow.com/a/69668434/1320237的方法,但我手动处理的事情太多了。

注意:虽然在我看来它有一个

O(n * n)
的运行时间,但它可能有
O(n)
n = number of packages
下载时间。所以它对于慢速互联网很有用。如果您的互联网连接速度很快,您可能会更快地删除
node_modules
目录。


4
投票

显然,删除 package.json 是有效的,但这并不总是所需的解决方案。有时你想跑步:

 npm i --package-lock-only //to update package.lock.json
 npm audit fix

然后:

npm i

这应该是第一次尝试,但是,我不知道为什么它在我的情况下不起作用,这是在反应本机场景中。当 npm 尝试写入非空文件夹(在本例中为“node_modules/@babel/.plugin-proposal-decorators-ysLLPQFw”)时,似乎会发生错误“npm install error ENOTEMPTY”。如果你跑步:

rm -rf node_modules/@babel/.plugin-proposal-decorators-ysLLPQFw

然后:

npm i

这次应该可以了。不过,这应该是一个 React-Native 的清理过程,当使用像 CRA 这样的 Web 入门工具包时,我以前从未发生过这种情况。


0
投票

我在使用 npm 时遇到了非常类似的问题。 对我来说最有效的是更新项目的包和依赖项,特别是

react-scripts

检查您的过时软件包有哪些:

npm outdated

或者,按照 Medium 中的这个人 的代码片段,它会自动执行一一检查和更新软件包的任务。


0
投票

只需进入相同的包名称目录并将其删除并重新安装即可。


0
投票

我正在制作一个 NPM 模块,并将其全局安装在我的计算机上。这是我遇到的问题。

我问题的核心是我的

script
中有一个
package.json
,称为
install

这会覆盖

npm install
命令!

{
  "name": "foo",
  "main": "index.js",
  "version": "1.0.1",
  
  "scripts": {
    "start": "node index.js",
    // OVERRIDES `npm i` ❗🚨
    // 👇 just use a different name
    "install": "npm pack && npm i -g foo-1.0.tgz"
  },
}

我通过将

install
重命名为
build
来修复它,然后删除我的包的
node_modules
执行
npm i


0
投票

当 npm 命令(如安装、审核修复等)由于任何原因在完成之前终止时,通常会发生这种情况。 对我来说,解决方案是完全删除 node_modules 文件夹并再次运行“npm install”。 或者,您也可以尝试仅删除 node_modules 中引发错误的目录。

© www.soinside.com 2019 - 2024. All rights reserved.