Node.js执行npm i multer安装Multer时出现EPERM报错求助
问题描述
Node.js项目开发过程中,需引入Multer包实现文件上传能力,在命令行执行npm i multer安装依赖时流程中断,无法完成安装,终端完整报错输出如下:
npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it! npm WARN task-manager@1.0.0 No description npm WARN task-manager@1.0.0 No repository field. npm ERR! code EPERM npm ERR! syscall unlink npm ERR! path D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.nodenpm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node' npm ERR! [OperationalError: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node'] { npm ERR! cause: [Error: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node'] { npm ERR! errno: -4048, npm ERR! code: 'EPERM', npm ERR! syscall: 'unlink', npm ERR! path: 'D:\\Rakesh Folder\\NodeCourse\\task-manager\\node_modules\\.bcrypt.DELETE\\lib\\binding\\napi-v3\\bcrypt_lib.node' npm ERR! }, npm ERR! errno: -4048, npm ERR! code: 'EPERM', npm ERR! syscall: 'unlink', npm ERR! path: 'D:\\Rakesh Folder\\NodeCourse\\task-manager\\node_modules\\.bcrypt.DELETE\\lib\\binding\\napi-v3\\bcrypt_lib.node', npm ERR! parent: 'task-manager' npm ERR! } npm ERR! npm ERR! The operation was rejected by your operating system. npm ERR! It's possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! PS D:\Rakesh Folder\NodeCourse\task-manager> npm i multer npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it! npm WARN task-manager@1.0.0 No description npm WARN task-manager@1.0.0 No repository field. npm ERR! code EPERM npm ERR! syscall unlink npm ERR! path D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.nodenpm ERR! errno -4048 npm ERR! Error: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node' npm ERR! [OperationalError: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node'] { npm ERR! cause: [Error: EPERM: operation not permitted, unlink 'D:\Rakesh Folder\NodeCourse\task-manager\node_modules\.bcrypt.DELETE\lib\binding\napi-v3\bcrypt_lib.node'] { npm ERR! errno: -4048, npm ERR! code: 'EPERM', npm ERR! syscall: 'unlink', npm ERR! path: 'D:\\Rakesh Folder\\NodeCourse\\task-manager\\node_modules\\.bcrypt.DELETE\\lib\\binding\\napi-v3\\bcrypt_lib.node' npm ERR! }, npm ERR! errno: -4048, npm ERR! code: 'EPERM', npm ERR! syscall: 'unlink', npm ERR! path: 'D:\\Rakesh Folder\\NodeCourse\\task-manager\\node_modules\\.bcrypt.DELETE\\lib\\binding\\napi-v3\\bcrypt_lib.node', npm ERR! parent: 'task-manager' npm ERR! } npm ERR! npm ERR! The operation was rejected by your operating system. npm ERR! It's possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If you believe this might be a permissions issue, please double-check the npm ERR! permissions of the file and its containing directories, or try running npm ERR! the command again as root/Administrator. npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\AnneRakesh\AppData\Roaming\npm-cache\_logs\2022-06-13T15_12_05_270Z-debug.log
故障原因
- 核心故障为Windows系统返回
EPERM权限错误:npm安装新依赖时需要清理node_modules目录下之前安装bcrypt残留的.bcrypt.DELETE临时文件夹,但无权限删除文件夹内的bcrypt_lib.node二进制文件,直接导致安装流程中断。 - 该类文件无法删除的常见诱因:
- 本地正在运行的Node服务、打开项目的代码编辑器占用了该二进制文件,Windows系统默认锁定被进程占用的文件,不允许删除操作
- 杀毒软件、系统安全防护工具正在扫描node_modules目录,临时锁定了相关文件
- 当前运行命令行的账号对项目目录没有足够的写/删除权限
- 此前安装bcrypt依赖时异常中断,残留了待清理的临时文件,且文件一直处于锁定状态
- 日志开头的lockfile版本警告不会直接导致安装失败:当前使用的npm为v6及以下版本(对应lockfile规范版本v1),但项目内的
package-lock.json是npm v7及以上版本生成的(对应lockfile规范版本v2),npm会尝试做兼容处理,但长期可能出现依赖版本不一致问题。
解决方法
按以下顺序操作,每完成一步可尝试重新执行安装命令验证:
- 释放文件占用
- 停掉所有本地运行的Node.js服务,关闭所有和该项目相关的终端窗口,打开任务管理器结束所有
node.exe进程 - 关闭打开该项目目录的代码编辑器(如VS Code)
- 临时关闭杀毒软件、Windows Defender的实时扫描功能,安装完成后可重新开启
- 停掉所有本地运行的Node.js服务,关闭所有和该项目相关的终端窗口,打开任务管理器结束所有
- 清理残留文件
- 进入项目目录
D:\Rakesh Folder\NodeCourse\task-manager\node_modules\,找到名称带.bcrypt.DELETE的文件夹直接手动删除 - 如果手动删除提示文件被占用,可重启电脑后再执行删除操作;如果仍无法删除,直接删除整个
node_modules文件夹,同时删除项目根目录下的package-lock.json文件
- 进入项目目录
- 提升命令行权限
- 关闭当前普通权限的命令行窗口,右键点击CMD/PowerShell图标,选择「以管理员身份运行」,再通过
cd命令切换到项目根目录
- 关闭当前普通权限的命令行窗口,右键点击CMD/PowerShell图标,选择「以管理员身份运行」,再通过
- 重新安装依赖
- 如果仅删除了bcrypt残留文件夹,直接执行
npm i multer即可完成安装 - 如果删除了整个node_modules和lock文件,先执行
npm install安装项目原有依赖,再执行npm i multer安装Multer包
- 如果仅删除了bcrypt残留文件夹,直接执行
- (可选)修复lockfile版本警告
- 执行
npm install -g npm@latest将本地npm升级到最新稳定版,升级后npm会自动适配lockfile版本v2规范,不会再出现兼容性警告。
- 执行
内容的提问来源于stack exchange,提问作者Anne Rakesh
相关产品推荐
相关产品推荐

