无法正常使用@graphql-codegen/cli:找不到'stream/web'模块错误
解决 GraphQL Codegen 初始化时的
Cannot find module 'stream/web' 错误 问题详情
工作环境
- Windows 10
- 非管理员用户
- NodeJS 16.0.0
- NPM 7.24.2
- Typescript 5.2.2
- Apollo Server Express 3.12.1
- GraphQL 15.8.0
错误信息
执行npx graphql-code-generator init时触发以下错误:
node:internal/modules/cjs/loader:943 throw err; ^ Error: Cannot find module 'stream/web' Require stack: - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\node_modules\@graphql-tools\apollo-engine-loader\node_modules\@whatwg-node\fetch\dist\create-node-ponyfill.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\node_modules\@graphql-tools\apollo-engine-loader\node_modules\@whatwg-node\fetch\dist\node-ponyfill.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\node_modules\@graphql-tools\apollo-engine-loader\cjs\index.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\cjs\graphql-config.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\cjs\config.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\cjs\cli.js - C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\cjs\bin.js at Function.Module._resolveFilename (node:internal/modules/cjs/loader:940:15) at Function.Module._load (node:internal/modules/cjs/loader:773:27) at Module.require (node:internal/modules/cjs/loader:1012:19) at require (node:internal/modules/cjs/helpers:93:18) at createNodePonyfill (C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\node_modules\@graphql-tools\apollo-engine-loader\node_modules\@whatwg-node\fetch\dist\create-node-ponyfill.js:31:24) at Object.<anonymous> (C:\Users\random\Documents\gitlab\game-backend\node_modules\@graphql-codegen\cli\node_modules\@graphql-tools\apollo-engine-loader\node_modules\@whatwg-node\fetch\dist\node-ponyfill.js:3:19) at Module._compile (node:internal/modules/cjs/loader:1108:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1137:10) at Module.load (node:internal/modules/cjs/loader:988:32) at Function.Module._load (node:internal/modules/cjs/loader:828:14) { code: 'MODULE_NOT_FOUND', requireStack: [ 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\node_modules\\@graphql-tools\\apollo-engine-loader\\node_modules\\@whatwg-node\\fetch\\dist\\create-node-ponyfill.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\node_modules\\@graphql-tools\\apollo-engine-loader\\node_modules\\@whatwg-node\\fetch\\dist\\node-ponyfill.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\node_modules\\@graphql-tools\\apollo-engine-loader\\cjs\\index.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\cjs\\graphql-config.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\cjs\\config.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\cjs\\cli.js', 'C:\\Users\\random\\Documents\\gitlab\\game-backend\\node_modules\\@graphql-codegen\\cli\\cjs\\bin.js' ] }
package.json 配置
{ "name": "game-backend", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node build/src/index.js", "build": "npx tsc", "serve": "concurrently \"npx tsc --watch\" \"nodemon -q build/src/index.js\"" }, "repository": { "type": "git", "url": "SomethingIDon'tWantToShow" }, "author": "SomethingIDon'tWantToShow", "license": "ISC", "dependencies": { "@graphql-tools/graphql-file-loader": "^8.0.0", "@graphql-tools/load": "^8.0.0", "@graphql-tools/schema": "^8.5.1", "@graphql-tools/utils": "^8.9.0", "@types/cors": "^2.8.12", "@types/express": "^4.17.14", "@types/graphql": "^14.5.0", "@types/node": "^20.5.9", "@types/sequelize": "^4.28.15", "apollo-server-core": "^3.12.1", "apollo-server-express": "^3.12.1", "body-parser": "^1.20.2", "dotenv": "^16.3.1", "express": "^4.18.2", "express-session": "^1.17.3", "graphql": "^15.8.0", "graphql-subscriptions": "^2.0.0", "keycloak-connect": "^22.0.2", "pg": "^8.11.3", "pg-hstore": "^2.3.4", "sequelize": "^6.32.1", "subscriptions-transport-ws": "^0.11.0", "type-graphql": "^1.1.1" }, "devDependencies": { "@graphql-codegen/cli": "^5.0.0", "@graphql-codegen/client-preset": "^4.1.0", "@types/express-session": "^1.17.7", "@types/ws": "^8.5.5", "concurrently": "^8.2.1", "nodemon": "^3.0.1", "typescript": "^5.2.2" } }
已尝试的无效方案
- 以管理员模式执行初始化命令
- 删除node_modules和package-lock.json后重装依赖
- 确认错误提及的文件存在且路径正确
- 更新NPM版本
- 同事相同配置项目无此问题,暂未更换NodeJS版本
解决思路
1. 降级 GraphQL Codegen 版本
@graphql-codegen/cli@5.x 依赖的 @whatwg-node/fetch 要求 Node.js 18+,而 Node.js 16.0.0 不支持内置的 stream/web 模块。可以降级到兼容 Node 16 的版本:
- 修改
package.json中的 devDependencies:"@graphql-codegen/cli": "^4.0.0", "@graphql-codegen/client-preset": "^3.0.0" - 删除
node_modules和package-lock.json - 执行
npm install重新安装依赖
2. 锁定兼容 Node 16 的 @whatwg-node/fetch 版本
利用 npm 的 overrides 功能强制指定兼容版本:
- 在
package.json中添加以下字段:"overrides": { "@whatwg-node/fetch": "^0.9.0" } - 删除
node_modules和package-lock.json - 执行
npm install
3. 升级 Node.js 版本(推荐)
Node.js 16 已结束官方维护,升级到 18.x 或更高版本可以从根本上解决依赖兼容性问题,同时获得更好的性能和安全性。
内容的提问来源于stack exchange,提问作者Paaz_
相关产品推荐
相关产品推荐

