npm ERR!错误:EPERM:不允许操作,请重命名


109

当我执行npm install我得到这个错误

npm ERR!错误:EPERM:不允许操作,请重命名C:\ projects ****** \ node_modules \ react-async-script'->'C:\ projects ******* \ node_modules.react-async-script 。删除'

  • 我以管理员身份运行cmd
  • 我跑npm cache clean
  • 我确保所有其他应用程序都没有与node_modules打开有关的内容

2
以管理员身份运行cmd为我工作
Homer

就我而言,我必须以普通用户(而非管理员)身份运行它,并且它可以正常工作,这似乎是用户权限冲突。但是似乎这里给出的所有其他解决方案均不需要npm clean,npm install。它是用户权限问题。如果更多人可以确认,我可以发布新答案。
MG开发人员

Answers:


124

以我的情况,这有所帮助。在继续执行这些命令之前,请关闭所有VS Code实例。

  1. 清理缓存

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

    npm install -g npm@latest --force
  3. 清理缓存

    npm cache clean --force
  4. 尝试再次安装组件。

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


1
谢谢@ kamil.ka,这是我在Windows上遇到的问题。Atom锁定了package.json,因此npm install无法更改它。
乔治

29
相同的注释适用于Windows上的VS Code…关闭它,问题消失了
Martin Kearn

1
对我来说,我运行了另一个节点进程,以json-server为例。一旦我停止了该软件包的安装就没有错误。
EddieB

对我来说,通过终止所有Visual Studio代码实例可以解决“ ERR!enoent这与npm无法找到文件有关”之类的错误。
阿比舍克(Abhishek)

有时我们会监督webpack的使用,它将所有js文件打包在一起,包括未更新的模块链接,例如。app.js。因此,在更新npm后,请尝试运行npm run watch。之后,以我为例,正确的模块链接已在新的app.js文件中更新。
彼得·范德·利利

21

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


“复位”对我来说意味着1.关闭VS,2.删除node_modules从FileExplorer 3.重新启动我的电脑4.运行npm install --force。然后终于成功了。
EGC

21

当尝试使用强制选项进行npm install来获取远程资源时,即使磁盘上存在本地副本,我也能正常工作。尝试跑步

npm install --force

已更新 对于我的一些同事而言,此解决方案无效。但是我们尝试使用yarn而不是npm。它可以正常工作(更快),并且始终无任何问题

yarn install [package-name]

其他人建议关闭AV软件。对我来说,在网络上,这不是一种选择。--force标志为我解决了这个问题
user2590928 '17

我只用毛线解决了我的问题,所以我建议给他一个机会。
恩戈洛·波洛托(Angelo Polotto)

20

如果您想避免使用该--force选项(通常是更好的方法)建议您停止运行该项目,因为这通常是在我所看到的几乎90%的情况下锁定文件的主要原因。

我建议按此顺序执行以下步骤:

1-在Angular中停止ng s和在React中停止 npm start 通常可以解决此问题,因为如果开发服务器正在运行项目,因为它锁定了一些文件,则通常会发生此错误,然后npm无法更新它们,从而引发此错误

2- 如果上述方法不起作用,请尝试关闭已打开工作空间的代码编辑器(也许它正在锁定某些文件或其他内容)

因此,请尝试关闭代码编辑器并运行:

npm install

3- 如果仍然无法正常工作,那么也许您可以尝试--force选择

npm install --force

2
这是我的问题,我在VS Code上通过终端rimraff'd了一个node_modules文件夹-由于某种原因,它没有完全从文件系统中删除node_modules并将其锁定。直到我关闭了VS Code的那个窗口,然后将其打开并备份,它实际上已被删除,然后我才能再次运行npm install。
Stu Furlong

13

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


1
根据github.com/npm/npm/issues/12059,此问题已修复。没有关于它将释放到什么版本的消息。根据评论,禁用AV并非总是有效。
user1821052

就我而言,我必须在安装过程中关闭SourceTree。
德扬


9

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


8

我得到了同样的东西。我在任何地方都找不到,但是让我震惊的是我们的VM倾向于将文件更改为只读状态。因此,我打开了package.json的文件属性,并Read-only在“常规”标签中取消了选择。

脚步

  1. 转到package.json文件。
  2. 右键单击并选择属性
  3. 在“ 常规”选项卡的“ 属性”部分中,取消选择“ 只读”
  4. 单击“ 应用”以应用更改。

对我来说只读,尽管最初的问题是我通常只使用代码进行安装。在这种情况下,我在Visual Studio中打开了该应用程序的新实例,因此可以移植对旧版本的某些更改,并且VS立即开始自行安装。然后,我像往常一样打开代码来运行npm install,两个应用程序都陷入了麻烦。在几次失败之后,我随后从应用程序的工作根版本中删除了一个节点模块,以允许我反向移植更改。该文件夹是只读的,因此可以继续阻止该文件。
Matrim

8

这是由防病毒引起的典型错误。对于像我这样的情况,我无法禁用A / V(公司政策),这是一种解决方法。

您必须更改polyfills.js内部Npm包装:

[NODE_HOME]/node_modules/npm/node_modules/graceful_fs/polyfills.js

查找以下语句:

if (process.platform === "win32") {

该语句内部有一个超时,如果发生错误,将重试。问题是在某些情况下,在超时后,文件仍被A / V锁定。解决的办法是消除超时并让此语句循环执行。与先前代码的更改注释:

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,

4

以我为例,某些东西被锁定,快速重启解决了该问题。


4

我仅在Windows中多次遇到过此问题,通常按顺序尝试这些问题。

  1. npm install --force
  2. 检查node_modules是否设置为只读,并删除是否为只读
  3. 删除 node_modules/
  4. 检查是否打开了任何可以访问项目根文件夹的编辑器
  5. 重启 :(

通常,尝试执行npm install其中一个步骤即可解决该问题。




2

将npm更新到5.4.2后,我遇到了同样的问题,npm开始对大多数npm命令给出相同的错误。一些解决方案建议使用--no-optional,但它并不总是有效。

其他人建议降级,但我不想降级。

我怀疑安装有问题,不确定是什么问题。

所以我重新更新了我的npm:

npm i -g npm

从那时起就运转良好。


1

npm在以下方面对我失败scandir

npm install -g webpack

...这可能是由于npm试图“修改”可能被其他进程锁定的文件引起的,如此和其他一些github线程所述。强制清除缓存,验证缓存,以管理员身份运行,禁用AV等之后,对我来说真正有效的解决方案是关闭可能会锁定文件的所有内容(即重新启动计算机)。

我希望这可以帮助某人挣扎。




1

我做了以下事情:

  1. 将npm升级到最新版本: npm install -g npm@6.5.0-next.0
  2. 从以下位置删除了npm-cache文件夹: c:/users/[username]/AppData/Roaming/npm-cache
  3. 缓存是否干净: npm cache clean --force
  4. 跑了npm install


1

在我的情况下运行npm: v6.9.0&& node: v10.16.1Windows,我有我的CLI(GIT bash)的运行以管理员身份。然后安装软件包,没有任何警告/错误


0

我的回答是先做npm cache clean --force。然后运行npm install -g npm@5.3.0以安装npm 5.3.0版本。对我来说,这个npm版本可以正常工作。


0

只需从npm全局软件包的路径中删除package文件夹。然后重新安装该软件包。请注意,这些软件包已全局安装在: C:\ Users \您的名字\ AppData \ Roaming \ npm \ node_modules




0

我也为此苦苦挣扎。我最终确定了一个使用nvm可以正常工作的解决方案:

cd ~/.nvm/versions/node/{your node version}/lib/ npm install npm

就是这样。


0

这可能是由于您的防病毒软件所致。如果无法禁用AV,则可以尝试修改NPM全局安装位置,因为节点安装到由AV Engines主动监视的APPDATA目录中。尝试运行以下命令-

npm配置集前缀“您的自定义位置” npm配置集缓存“您的自定义位置”

删除node_modules目录,然后重新安装软件包。




0

我关闭了VS,删除了node_modules文件夹。

然后运行:

npm i -D -E clean-webpack-plugin@3.0.0 css- 
loader@3.4.2 html-webpack-plugin@3.2.0 mini-css- 
extract-plugin@0.9.0 ts-loader@6.2.1 typescript@3.7.5 
webpack@4.41.5 webpack-cli@3.3.10 

一旦完成运行,就必须将属性更改为不只对node_modules文件夹只读。

然后运行:

npm i @microsoft/signalr @types/node

然后在VS中打开备份该项目,然后package.json与依赖项看起来正确。

与其他人一样,谈论对node_modules文件夹的只读操作并关闭VS以运行npm install over。


0

如果您在PHP Storm上遇到问题:

  1. 关闭终端标签
  2. 打开一个新的终端标签
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.