当我尝试使用
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
但没成功。
可能删除
node_modules
文件夹和 package-lock.json
文件,然后重新安装 npm
即可解决您的问题。
因此,请考虑以下命令来应用上述操作:
npm remove node_modules
npm remove package-lock.json
npm install
我在互联网连接缓慢且不可靠时遇到了同样的问题。我创建了这个可以与
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
目录。
显然,删除 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 入门工具包时,我以前从未发生过这种情况。
我在使用 npm 时遇到了非常类似的问题。 对我来说最有效的是更新项目的包和依赖项,特别是
react-scripts
。
检查您的过时软件包有哪些:
npm outdated
或者,按照 Medium 中的这个人 的代码片段,它会自动执行一一检查和更新软件包的任务。
只需进入相同的包名称目录并将其删除并重新安装即可。
我正在制作一个 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
。
当 npm 命令(如安装、审核修复等)由于任何原因在完成之前终止时,通常会发生这种情况。 对我来说,解决方案是完全删除 node_modules 文件夹并再次运行“npm install”。 或者,您也可以尝试仅删除 node_modules 中引发错误的目录。