Typescript使用query-string模块陷入导入错误循环求助
解决TypeScript中使用query-string的模块兼容错误
问题根源
query-string从v8.x版本开始彻底转为纯ES模块,不再支持CommonJS的require()导入逻辑。你的项目初始用的是CommonJS模块配置,两种模块规范冲突,才导致了这一系列循环报错。
推荐解决方案:适配ES模块规范
1. 调整tsconfig.json配置
修改模块相关参数,让TypeScript编译输出ES模块,并适配正确的模块解析规则:
{ "compilerOptions": { "target": "ES6", "lib": ["es6", "dom"], "module": "ESNext", "rootDir": "src", "moduleResolution": "node16", "outDir": "lib", "esModuleInterop": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true } }
2. 更新package.json配置
添加ES模块声明,同时修改ts-node启动命令以支持ES模块:
{ "name": "personal-typescript", "version": "1.0.0", "description": "", "main": "lib/index.js", "type": "module", "scripts": { "start": "npm run build:live", "build": "tsc -p .", "build:live": "nodemon --watch 'src/**/*.ts' --exec \"ts-node --esm\" src/index.ts" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { "@types/express": "^4.17.17", "@types/node": "^18.11.19", "dotenv": "^16.0.3", "nodemon": "^2.0.20", "query-string": "^8.1.0", "ts-node": "^10.9.1", "typescript": "^4.9.5" }, "dependencies": { "express": "^4.18.2" } }
3. 保持正确的导入方式
代码里继续用ES模块的导入语法:
import queryString from "query-string";
备选方案:降级query-string版本
如果不想改动模块配置,可以把query-string降级到v7.x版本(该版本同时兼容CommonJS和ES模块):
npm uninstall query-string npm install query-string@7.1.3
降级后无需修改现有配置,直接使用原来的导入方式即可。
内容的提问来源于stack exchange,提问作者gmeeker99
相关产品推荐
相关产品推荐

