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

bundle.js报fs未定义 依赖已存在于package.json及node_modules

问题根因

fs is not defined报错本质是打包工具把Node.js专属内置模块错误打进了非Node环境的运行产物,和你有没有在package.json声明依赖、node_modules里有没有对应包完全没关系:

  • fs/path/url/buffer/assert/util都是Node.js运行时自带的内置API,浏览器环境原生不存在这些对象,本来就不能直接在前端浏览器代码里调用
  • bundle.js末尾的(fs, path, url, require$$0$1, buffer, assert, util);是打包工具转译CommonJS模块时的依赖识别错误,把仅能在Node端运行的依赖错误输出到了运行产物里,执行时找不到对应变量自然抛错
  • 手动修改构建自动生成的bundle.js没有任何意义,只要重启服务、重新触发构建,所有手动改动都会被构建流程覆盖还原。
修复方案

根据项目实际运行场景选对应处理方式即可:

纯前端浏览器项目

  • 先排查业务代码和引入的第三方依赖,有没有误写Node专属API调用,比如直接引入fs做文件读写、用了只能在Node跑的路径处理/文件操作类npm包。这类逻辑本来就不能在浏览器里运行,要么换成浏览器兼容的实现,要么把相关逻辑挪到后端服务层处理。
  • 给构建工具加配置,明确告诉打包工具不要处理这些Node内置模块,不要把它们打进前端产物:
    如果用Vite构建,在配置里加别名映射:
// vite.config.js
export default {
  resolve: {
    alias: {
      fs: false,
      path: false,
      url: false,
      buffer: false,
      assert: false,
      util: false
    }
  }
}

如果用Webpack 5+构建,在resolve.fallback里关闭对应模块的polyfill:

// webpack.config.js
module.exports = {
  resolve: {
    fallback: {
      fs: false,
      path: false,
      url: false,
      buffer: false,
      assert: false,
      util: false
    }
  }
}

Node端运行项目(比如Electron主进程、Node服务脚本)

直接改构建配置的目标环境即可:

  • 把构建target从默认的web改成对应运行环境:纯Node服务设为和本地一致的Node版本号(比如node18),Electron主进程设为electron-main
  • 同时把上述Node内置模块标记为外部依赖,不要让打包工具把它们打包进产物,比如Vite配置可以这么写:
// vite.config.js
export default {
  build: {
    target: 'node18',
    rollupOptions: {
      external: ['fs', 'path', 'url', 'buffer', 'assert', 'util']
    }
  }
}

改完配置重启服务重新构建,报错就会消失。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:54:40