NextJS切换getServerSideProps为getStaticProps时构建报错:找不到fs模块
问题原因解析
报错根源:执行环境与依赖打包逻辑的变化
你遇到的Can't resolve 'fs'错误,核心原因是**getServerSideProps和getStaticProps的执行环境与依赖处理逻辑完全不同**:
getServerSideProps的运行逻辑:该函数在每次用户请求时仅在服务器端运行,Next.js会自动隔离服务器端依赖,不会将bcrypt、@mapbox/node-pre-gyp这类依赖Node.js核心模块(如fs)的代码打包到客户端浏览器的bundle中,所以之前运行正常。getStaticProps的运行逻辑:该函数在项目构建阶段运行,Next.js会对其关联的所有依赖(包括你引入的Database.js,以及Database.js依赖的bcrypt)进行全量依赖分析。而bcrypt依赖的@mapbox/node-pre-gyp内部使用了Node.js专属的fs模块,浏览器环境不存在这个模块,因此构建时触发模块找不到的错误。
关键细节验证
虽然你提到Database.js未直接使用fs,但它引入的bcrypt库依赖@mapbox/node-pre-gyp,而后者明确调用了fs模块。当切换到getStaticProps后,构建流程会尝试将这些服务器端依赖纳入客户端打包范围,最终导致报错。
内容的提问来源于stack exchange,提问作者ConfusedUnderGradStudent
相关产品推荐
相关产品推荐

