npm ERR! Error: EPERM:操作不允许,重命名

253

当我执行 npm install 命令时,出现以下错误:

npm ERR! Error: EPERM: operation not permitted, rename C:\projects******\node_modules\react-async-script' -> 'C:\projects*******\node_modules.react-async-script.DELETE'

  • 我已以管理员身份运行cmd命令
  • 在执行命令之前我已运行了 npm cache clean
  • 我已确保所有其他应用程序中没有与 node_modules 相关的内容打开

6
以管理员身份运行命令对我有用。 - Homer
在我的情况下,我必须以普通用户身份运行它(而不是管理员),然后它就可以工作了,似乎是用户权限冲突。但似乎这里提供的其他所有解决方案(npm clean,npm install)都不需要。这是一个用户权限问题。如果更多人能够确认,我可以发布一个新的答案。 - MG Developer
在我的情况下,我没有使用Node.js命令提示符。一旦我进行了更改,它就可以正常工作了。 - a3rxander
删除了 node_modules 文件夹,然后它就可以工作了。 - Luv33preet
我在 macOS 上遇到过这个问题很多次。我已经阅读了关于这个问题和其他问题的30多个答案。最后,我将一个文件夹完整地复制到一个不需要任何系统或管理员权限的驱动器上。对于 Windows 用户来说,可以是 D:\ 或 E:\。npm install - 重新安装以进行更新。 npm run dev - 一切正常工作。 - Afrowave
49个回答

335

根据我的情况,以下操作有所帮助:

在执行以下命令之前,请关闭所有 VS Code 实例。

  1. 使用以下命令清除缓存:

     npm cache clean --force
    
  2. 以管理员身份全局安装最新版本的npm:

  3.  npm install -g npm@latest --force
    
  4. 使用以下方法清除缓存:

     npm cache clean --force
    
  5. 尝试再次安装您的组件。

希望这可以解决您的问题。如果没有,您可以暂时禁用您的防病毒程序,然后再试一次。


73
相同的评论适用于Windows上的VS Code...关闭它,问题就会消失。 - Martin Kearn
6
对我而言,有另一个Node进程在运行,例如我的是json-server。一旦我停止了那个进程,这个包就成功安装了。 - EddieB
@Roman 关闭反病毒软件对我有效,但是什么导致反病毒软件干扰Node.js? - Chirag Bhansali
66
"npm WARN using --force,我真希望你知道你在做什么。"……我完全不知道我在做什么。" - Fusseldieb
8
我的方法非常简单,我关闭了所有的VSCode项目并重新启动它,之后一切都开始正常工作了。不过还是谢谢你,因为在阅读了这个答案和评论后,我想起来做了那件事。 - faijan memon
显示剩余4条评论

79

对我来说,我只是关闭了代码编辑器(VS Code),然后运行了相同的命令。这就为我解决了问题。


对我来说,这是由于我在 ng serve 运行时尝试从 VS 安装引起的。取消 ng serve 并从命令行安装解决了问题。 - Jon Vote
@Sifat Haque 这对我起作用了 - undefined
我的问题出现在VS Code中。当我注意到运行ls会导致错误时,我重新启动了VS Code。下次打开时,Mac弹出了一个安全对话框,确认访问我的文档文件夹。就像VS Code的访问权限已过期一样。 - undefined

45

不是 package.json 的问题,但由于某种原因,我的 node_modules/ 目录变成了只读。重置该目录解决了这个问题。


对我来说,“重置”意味着 1. 关闭 VS,2. 从文件资源管理器中删除 node_modules3. 重新启动我的电脑,4. 运行 npm install --force。然后终于它工作了。 - EGC
1
node_modules文件夹 >> 属性 >> 取消只读 对我有用。这是在将文件夹复制到新位置后发生的。希望能帮助到其他人。 - brianc
1
运行 'npm update' 时,使用 Visual Studio 2022 和 Git 出现 EPERM 错误。必须从 node_modules 文件夹及其子文件夹以及 package-lock.json 文件中删除只读属性。 - Timothy Lee Russell
在我的情况下,据我所知,每次构建错误后,npm 会将 "node_modules" 重置为只读。我转向了 yarn,它基本上是一个可替换的工具。 - user158037

41

当我尝试使用强制选项npm install来获取远程资源时,即使本地磁盘上已经存在本地副本,它也运行正常。尝试运行

npm install --force

更新 对于我的一些同事,这个解决方案并不起作用。但我们尝试使用 yarn 代替npm。它总是能够快速地运行而且没有任何问题。

yarn install [package-name]

其他人建议关闭防病毒软件。对于我来说,在我所在的网络上,这不是一个选项。--force 标志解决了我的问题。 - user2590928
4
我只能用yarn解决我的问题,所以我建议你也试一试。 - Ângelo Polotto
花了很多时间尝试修复npm的问题(全局安装无法识别的问题)。按照您的建议使用yarn,运行了yarn global命令,现在我想要的包可以正常工作了!这是一种侧面思考的方法!谢谢! - danivicario

33

如果你想避免使用--force选项 (这通常是更好的方法), 我建议确保停止运行该项目,因为这通常是导致文件锁定的主要原因,在我看来有近90%的情况都是如此

我建议按照以下步骤进行:

1- 在Angular中停止ng s,在React中停止npm start 通常可以解决此问题,因为通常出现此错误是因为开发服务器正在运行该项目,导致某些文件被锁定,然后npm无法更新它们,从而抛出此错误

2- 如果上述方法不起作用,请尝试关闭打开工作区的代码编辑器 (可能会锁定一些文件或其他原因导致),然后再运行:

npm install

3- 如果仍然不起作用,那么您可以尝试--force选项

npm install --force

4
这是我的问题,我通过 VS Code 的终端 rimraff 了一个 node_modules 文件夹 - 不知怎的它没有完全从我的文件系统中删除并将其锁定。直到我关闭了那个 VS Code 窗口并重新打开它,它才被真正地删除,然后我才能再次运行 npm install。 - Stu Furlong

17

我遇到了相同的错误,根据https://github.com/Medium/phantomjs/issues/19所述,可能是由于您的防病毒软件引起的。 我在安装期间禁用了我的防病毒软件,并以管理员身份在cmd上执行了“npm install”,然后它就可以正常工作了。 希望这可以帮到您。


1
根据 https://github.com/npm/npm/issues/12059 的说法,这个问题已经被解决了。目前还没有确定它将会在哪个版本中发布。根据评论,禁用杀毒软件并不总是有效的。 - user1821052
在我的情况下,我必须在安装期间关闭SourceTree。 - Dejan

15

我正在使用 macOS Catalina 操作系统,

 npm init 

我遇到了错误

 operation not permitted, uv_cwd

2021 年,以下是解决此问题的方法。

非常简单:

步骤 1:进入父文件夹

 cd ../
         

步骤2:再次进入您的项目文件夹,

 cd  your-project-folder

就是这样。它可行。


只是想点赞这个解释,因为在2023年我也遇到了同样的问题。我正在使用MAC OS Ventura,遇到了相同的问题。@hoogw的解释解决了这个问题。当我尝试使用简单的"ls"命令列出目录时,出现了"Error: EPERM: operation not permitted, uv_cwd"的错误。简单地使用"cd .."命令再返回到文件夹中解决了这个问题。谢谢! - undefined

11
我也遇到了同样的问题。我没有在其他地方找到解决方法,但是我发现我们的虚拟机会将文件更改为只读状态。因此,我打开了 package.json 文件属性,并在“常规”选项卡中取消了 只读 的选择。 步骤:
  1. 进入 package.json 文件。
  2. 右键单击并选择 属性
  3. 常规 选项卡下的 属性 部分,取消选择 只读
  4. 点击 应用(A),进行修改保存。

只读权限是针对我的,尽管最初的问题是我通常只使用代码进行安装。在这种情况下,我打开了 Visual Studio 中应用程序的新实例,以便从旧版本中移植一些更改,然后 VS 立即开始安装自己。然后,我打开了代码以像往常一样运行 npm install,但两个应用程序都陷入了混乱。经过多次失败后,我从我们应用程序的工作根版本中批量删除了一个 node-modules,以允许我回溯更改。这个文件夹是只读的,所以继续阻止事情发生。 - Matrim
1
这个方法对我很有效。如果有人想知道如何检查您的权限,请执行以下操作: ls -l 然后您将看到访问权限,为了更改它,快速启用用户、组和其他人的读、写和执行权限的方法是:chmod 777 fileName - IcyHerrscher

9
这是一种典型的由杀毒软件导致的错误。对于像我这样无法禁用A / V(公司政策)的情况,有一个解决方法。
您需要更改Npm 包内的polyfills.js[NODE_HOME]/node_modules/npm/node_modules/graceful_fs/polyfills.js 查找此语句:
if (process.platform === "win32") {

在这个语句中,有一个超时设置,以防出现错误重试。问题在于,在某些情况下,超时后,文件仍然被杀毒软件锁定。解决方法是去掉超时,并让这个语句循环执行。与先前的代码相比,改动如下所示:

if (platform === "win32") {

fs.rename = (function (fs$rename) { return function (from, to, cb) {
  var start = Date.now()
  var backoff = 0;
  fs$rename(from, to, function CB (er) {
    if (er
        && (er.code === "EACCES" || er.code === "EPERM")
        /*&& Date.now() - start < 60000*/) {
            console.log("Retrying rename file: " + from + " <> " + to)
            fs$rename(from, to, CB);
      /*setTimeout(function() {
        fs.stat(to, function (stater, st) {
          if (stater && stater.code === "ENOENT")
            fs$rename(from, to, CB);
          else
            cb(er)
        })
      }, backoff)*/
      if (backoff < 100)
        backoff += 10;
      return;
    }
    if (cb) cb(er)
  })
}})(fs.rename)
}

您是真正的MVP。 - Atanas Korchev
我曾经遇到过类似的错误,禁用了杀毒软件就解决了。非常感谢。 - Nimish

8

正如Martin Kearn在评论中指出的那样,关闭Visual Studio解决了我遇到的npm权限问题。显然,VS有时会锁定node_modules中的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接