运行npm脚本报ENOENT错误 找不到npm生成的临时cmd文件如何解决
故障根因
该报错不是npm自身生成临时文件的逻辑错误,本质是npm在系统临时目录创建的执行脚本e2e-<timestamp>.cmd在写入阶段被拦截/删除,导致npm后续执行openSync读取文件时找不到目标。
排查解决步骤
按优先级从高到低操作:
- 优先排查安全软件拦截:Windows Defender、第三方杀毒软件、企业终端安全管控程序,会默认将Temp目录下随机命名的
.cmd脚本判定为高风险恶意程序,在npm创建文件的瞬间直接隔离删除。
操作:将系统临时目录C:\Users\Chris\AppData\Local\Temp\、项目根目录加入安全软件白名单,临时关闭实时防护后重试脚本,如果不再报错直接对应配置白名单即可。 - 校验临时目录权限:确认当前登录的Windows账号对Temp目录拥有完全读写权限,权限不足时系统会拦截npm的写入操作,抛出文件不存在的异常。
操作:右键Temp文件夹→「属性」→「安全」,确认当前登录用户的权限勾选了「完全控制」,权限异常时直接重置目录所有权和权限。 - 修复npm运行环境
- 执行
npm cache clean --force清空损坏的npm缓存 - 手动删除Temp目录下所有
npm-*、e2e-*前缀的残留临时文件 - 删除项目下的
node_modules文件夹和package-lock.json,重新执行npm install安装依赖后重试
- 执行
- 修复npm版本兼容问题:npm 8.x版本内置的
@npmcli/run-script模块在部分Windows环境存在临时文件创建的时序bug,升级或降级npm版本即可解决:
执行npm install -g npm@9升级到v9稳定版,或执行npm install -g npm@6降级到兼容性更好的v6 LTS版本后重试。 - 排查自动清理程序:如果开启了Windows存储感知、第三方磁盘自动清理工具,这类程序会自动扫描删除Temp目录下的新建文件,临时关闭自动清理功能后测试。
快速验证技巧:手动在Temp目录下新建一个
e2e-test.cmd空文件,如果文件在数秒内自动消失,即可确定是第三方拦截/清理程序导致的问题,直接定位对应软件配置规则即可。
内容的提问来源于stack exchange,提问作者Christopher Walters
相关产品推荐
相关产品推荐

