Angular SSR执行npm run build:ssr出现多类依赖报错如何解决
问题根因
该报错属于SSR服务端构建的典型问题,常规客户端构建仅处理浏览器侧代码,不会打包Node.js专属依赖;而SSR构建会对服务端入口的所有依赖做静态分析,遇到动态require语法、缺失的Node原生模块时就会抛出对应错误,本次报错确实和新增的爬虫类服务端依赖直接相关。
解决方案
1. 先修复依赖缺失告警
执行如下命令安装缺失的依赖:
npm install fast-crc32c bufferutil utf-8-validate puppeteer-core
其中fast-crc32c是hash-stream-validation的必须依赖,bufferutil、utf-8-validate是ws库的可选依赖,puppeteer-core是puppeteer-extra的对等依赖,均需要提前安装。
2. 配置构建跳过动态依赖打包
动态require无法被webpack等构建工具静态分析,需要把这些纯服务端依赖加入构建外部依赖列表,构建时不打包这些依赖,运行时直接从node_modules加载,根据你用的框架选择对应配置:
自定义Webpack SSR场景
在服务端webpack配置文件中添加externals配置:
module.exports = { // 其余原有配置保持不变 externals: [ 'clone-deep', 'puppeteer-extra', 'puppeteer-core', 'node-schedule' ] }
Next.js场景
在next.config.js中添加服务端外部包配置:
const nextConfig = { experimental: { serverExternalPackages: ['clone-deep', 'puppeteer-extra', 'puppeteer-core', 'node-schedule'] } } module.exports = nextConfig
Nuxt3场景
在nuxt.config.ts中添加nitro外部依赖配置:
export default defineNuxtConfig({ nitro: { externals: { external: ['clone-deep', 'puppeteer-extra', 'puppeteer-core', 'node-schedule'] } } })
3. 校验代码导入逻辑
确认爬虫相关代码仅在服务端执行,不要在客户端组件/代码中导入puppeteer、node-schedule这类仅支持Node.js环境的包,避免客户端运行时报错。
验证
配置完成后删除node_modules、package-lock.json文件,重新执行npm install安装依赖,再运行npm run build:ssr即可正常构建。
内容的提问来源于stack exchange,提问作者Sarmad
相关产品推荐
相关产品推荐

