"statSync" is not exported by "\_\_vite-browser-external:node:fs"

560 阅读2分钟

"statSync" is not exported by "__vite-browser-external:node:fs"

今天准备像往常一样打包发版,结果突然看到打包报错了:

image.png

这啥啊?昨天还好好的,问一下ai,看ai怎么说

"statSync" is not exported by "__vite-browser-external:node:fs"
这个错误表明你正在尝试从 Vite 项目中同步访问文件系统(fs)模块的 statSync 方法,但是 Vite 无法从指定的外部库中导出这个方法。

解释:

Vite 是一个现代化的前端构建工具,它将依赖项外部化,并通过 Hash 模块 ID 来直接引用它们。__vite-browser-external:node:fs 表示 Vite 试图外部化 Node.js 的 fs 模块,但这通常不是一个好主意,因为 fs 模块是一个 Node.js 特有的模块,并不适用于浏览器环境。

解决方法:

如果你需要在浏览器端代码中使用文件操作,应当考虑使用浏览器兼容的解决方案,例如使用 fs 的浏览器模拟版本,或者是 Web API 如 File 和 Blob 对象。

如果你只是想读取文件的状态,可以考虑使用 fetch API 结合服务器端的中间件来实现。

如果你正在开发 Node.js 应用并在 Vite 中遇到这个问题,确保你没有尝试在客户端代码中引用 Node.js 内置模块。客户端代码应当只依赖于浏览器环境下的模块。

如果你需要在 Vite 项目中使用 Node.js 的 fs 模块,可以考虑在 Vite 配置文件中将该模块内置化,或者使用条件判断来区分客户端和服务端代码。

但是我十分确信自己没有在业务组件中使用node独有的api,那是什么问题呢?继续上网查

image.png

image.png 猛然惊醒,原来是项目由依赖自动导入功能,今天写组件的时候手一滑,写了个

console.log('res=>', resolveConfig)

这就导致自动引入了如下模块:

import { resolveConfig } from "unocss";

而这个模块用到了node独有的一些操作文件和路径的api,导致了打包报错,注释掉这两行,即可正常打包。

好了,问题解决