Node.js 18.13.0引入@aws-sdk/client-dynamodb触发UUID相关语法错误
Node.js升级到v18.13.0后@aws-sdk/client-dynamodb触发语法错误
问题场景
- Node.js v14.15.0环境下,这行代码运行完全正常:
const ddbClient = require("@aws-sdk/client-dynamodb"); - 用nvm切换到v18.13.0后,启动项目就报语法错误,反复添加/移除该行代码确认,问题确实由引入这个包导致。
具体错误信息
/mnt/e/CODING/nzgk_series/2/node_modules/@aws-sdk/client-dynamodb/dist-cjs/protocols/Aws_json1_0.js:3541 ClientRequestToken: input.ClientRequestToken ?? (0, uuid_1.v4)(), ^ SyntaxError: Unexpected token ? at Module._compile (internal/modules/cjs/loader.js:723:23) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Module.require (internal/modules/cjs/loader.js:692:17) at require (internal/modules/cjs/helpers.js:25:18) at Object.<anonymous> (/mnt/e/CODING/nzgk_series/2/node_modules/@aws-sdk/client-dynamodb/dist-cjs/commands/BatchExecuteStatementCommand.js:8:23) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
项目package.json内容
{ "name": "2", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "start": "nodemon app.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/util-dynamodb": "^3.245.0", "body-parser": "^1.20.1", "dotenv": "^16.0.3", "ejs": "^3.1.8", "express": "^4.18.2", "express-ejs-layouts": "^2.5.1", "socket.io": "^4.5.4", "uuid": "^9.0.0" } }
解决方法
核心原因
你安装的@aws-sdk/client-dynamodb@3.245.0编译代码里用到了空值合并运算符??,但切换到Node.js v18后没有重新安装依赖,导致依赖包还是基于v14环境生成的,或者nodemon缓存了旧模块内容,才出现v18识别不了该语法的矛盾(实际上v18本身是支持??的)。
操作步骤
- 切换到v18.13.0环境后,先删除旧依赖和锁文件:
rm -rf node_modules package-lock.json - 重新安装所有依赖:
npm install - 重启nodemon加载新依赖:
npm start
如果上述步骤无效,直接升级AWS SDK到最新兼容版本:
npm install @aws-sdk/client-dynamodb@latest @aws-sdk/util-dynamodb@latest
内容的提问来源于stack exchange,提问作者Jerry 132
相关产品推荐
相关产品推荐

