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

Rollup构建挂起触发内存溢出及模块找不到问题求助

Rollup构建挂起、内存溢出及模块找不到问题的排查与解决

问题描述

执行rollup -c时,第一个配置项可正常完成构建,但命令随即挂起,等待一段时间后触发JavaScript堆内存溢出错误。手动排查Rollup启动shell脚本时,执行exec node "$basedir/../rollup/dist/bin/rollup" "$@"会提示Error: Cannot find module '/rollup/dist/bin/rollup'。已尝试升级依赖、使用pnpx运行,未发现代码循环依赖。

配置与环境信息

Rollup配置文件

// @ts-check
import multiInput from "rollup-plugin-multi-input";
import typeScript from "rollup-plugin-typescript2";

export default [
  {
    input: "packages/**/*.tsx",
    output: {
      format: "esm",
      dir: ".registry/js"
    },
    plugins: [
      multiInput(),
      typeScript({
        tsconfig: "tsconfig.react.json"
      })
    ]
  },
  {
    input: "packages/etech-ui-utils/src/index.ts",
    output: {
      format: "esm",
      dir: "packages/etech-ui-utils/dist"
    },
    plugins: [
      multiInput(),
      typeScript({
        tsconfig: "tsconfig.lib.json"
      })
    ]
  }
];

核心依赖版本

{
    "rollup": "^4.20.0",
    "rollup-plugin-multi-input": "^1.4.2",
    "rollup-plugin-typescript2": "^0.36.0"
}

系统环境

  • macOS 14.6
  • Node.js 22.5.1
  • pnpm 9.6.0

解决方案

1. 修复模块找不到的路径问题

出现Cannot find module '/rollup/dist/bin/rollup'是因为shell脚本中的$basedir变量未正确解析Rollup的安装路径(pnpm的依赖存储结构与npm不同,默认在node_modules/.pnpm下)。解决方式:

  • 直接使用pnpm的包执行命令替代手动调用脚本:pnpm exec rollup -c
  • 若需自定义脚本,检查$basedir的取值逻辑,确保指向Rollup包的实际安装目录(比如node_modules/.pnpm/rollup@4.20.0/node_modules/rollup)

2. 解决内存溢出与构建挂起问题

  • 缩小输入范围:第一个配置项的packages/**/*.tsx通配符可能匹配了大量无关文件(如测试用例、Demo代码),导致插件处理时内存过载。修改为明确的路径,比如packages/*/src/**/*.tsx
  • 增加Node内存限制:执行构建时添加内存参数:NODE_OPTIONS="--max-old-space-size=4096" pnpm exec rollup -c(数值可根据实际情况调整,如8192即8G)
  • 优化插件配置:
    • 给rollup-plugin-typescript2开启缓存,减少重复编译:
      typeScript({
        tsconfig: "tsconfig.react.json",
        cacheRoot: ".rollup-cache" // 添加缓存目录
      })
      
    • 第二个配置项输入为单个文件,无需multiInput插件,直接移除该插件以减少不必要的开销

3. 修复插件兼容性问题

rollup-plugin-multi-input@1.4.2是2022年的旧版本,与Rollup 4.x存在兼容性风险。可尝试:

  • 降级Rollup到3.x版本(如pnpm add rollup@3.29.4),与旧插件版本适配
  • 替换为官方维护的多入口插件@rollup/plugin-multi-entry,安装后替换原插件:
    import multiEntry from "@rollup/plugin-multi-entry";
    // 插件使用改为multiEntry()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:46:16