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

Mem*_*eng 22 npm reactjs npm-install

当我尝试使用安装一些新软件包时遇到以下错误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
Run Code Online (Sandbox Code Playgroud)

什么地方出了错?我也尝试过npm audit fix --legacy-peer-deps但没有成功。

Sal*_*med 44

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

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

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

  • 这发生在我的全局模块上......有什么想法吗? (4认同)
  • 我认为,当安装包期间出现中断时,会发生这种情况,对于全局查找全局node_module并删除您正在安装的目录包。对于我来说,我正在使用 NVM,我转到 .nvm/versions/node/<您收到错误的节点版本>/lib/node_modules 并删除了尝试安装的包。 (2认同)
  • `rm -rf node_modules` 效果更好。请注意,删除“package-lock.json”将意味着您将丢失锁定的确切版本,而您将获得最新版本。大多数时候这很好,但要注意潜在的问题。 (2认同)

Use*_*ser 13

当我的互联网连接缓慢且不可靠时,我也遇到了同样的问题。我创建了这个脚本,可以运行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
Run Code Online (Sandbox Code Playgroud)

基本上,我使用/sf/answers/4876790411/中的方法,但我手动处理的事情太多了。

注意:虽然在我看来它有一个O(n * n)运行时间,但它可能有O(n)一个n = number of packages. 所以它对于慢速互联网很有用。如果您的互联网连接速度很快,您可能会更快地删除node_modules目录。


Era*_* Or 6

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

 npm i --package-lock-only //to update package.lock.json
 npm audit fix
Run Code Online (Sandbox Code Playgroud)

进而:

npm i
Run Code Online (Sandbox Code Playgroud)

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

rm -rf node_modules/@babel/.plugin-proposal-decorators-ysLLPQFw
Run Code Online (Sandbox Code Playgroud)

进而:

npm i
Run Code Online (Sandbox Code Playgroud)

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