You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行npm run build报EBUSY资源被锁错误,仅偶尔成功如何解决?

解决步骤

  • 第一步:修改构建脚本,前置清空dist目录
    安装rimraf工具用于强制清理构建产物目录:
    npm install -D rimraf
    修改package.json中的build命令,先清空dist再执行构建:
    "build": "rimraf dist && 原有的build命令内容"
    避免旧的未写完的dist文件占用锁导致复制冲突。

  • 第二步:调整文件复制插件的并发和重试配置
    如果你使用的是copy-webpack-plugin,在webpack配置中添加重试、降低并发参数:

    new CopyPlugin({
      patterns: [/* 保留你原有复制规则不变 */],
      options: {
        concurrency: 1, // 单线程复制避免并行写入冲突
        retry: {
          attempts: 5, // 失败自动重试5次
          delay: 200 // 每次重试间隔200ms等待锁释放
        }
      }
    })
    

    可以直接解决随机锁导致的单次复制失败问题。

  • 第三步:给Windows安全软件添加目录排除
    除了McAfee外,需要将以下目录添加到Windows Defender实时扫描的排除列表:

    1. 你的React项目根目录
    2. NPM全局缓存目录(默认路径为C:\Users\你的用户名\AppData\Roaming\npm-cache)
    3. Node.js安装目录
      Windows Defender的实时扫描会在新文件生成的瞬间加锁扫描,是这类随机EBUSY错误的最常见诱因。
  • 第四步:更换Node.js LTS版本
    卸载当前安装的Node.js,安装官方长期支持版本(建议18.x或20.x LTS),避免旧版本Node.js在Windows平台的文件IO已知bug导致的写入异常。

  • 第五步:调整TypeScript声明文件输出逻辑
    如果项目开启了d.ts生成,修改tsconfig.json将声明文件输出到临时目录而非直接输出到dist,全部生成完成后再统一复制到dist目录:

    {
      "compilerOptions": {
        "declaration": true,
        "declarationDir": "./temp-types",
        // 其他配置保持不变
      }
    }
    

    再修改build命令,最后添加复制临时声明文件到dist的逻辑,避免一边生成声明一边复制的时序冲突。

你提到的dist目录下index.d.ts内容全为NUL的问题,是文件写入过程中被强制打断导致的文件系统占位错误,按上述步骤调整后即可完全解决。

内容的提问来源于stack exchange,提问作者Kid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:24:05