在 node.js 应用中以调试模式 (VSCode) 使用可选链接 (ES2020) 时出现语法错误

Syntax error when using optional chaining (ES2020) in debug mode (VSCode) in node.js app

我收到“未捕获的语法错误:意外的标记”。如果我的代码包含可选链接 (?.),当我尝试在 VSCode (F5) 中以调试模式使用我的 Express 应用程序时出现消息。 当我将应用程序与正常工作的命令“npm start”一起使用时,我没有遇到这个问题。 我没有使用非常具体的配置(编译器、打火机...)构建项目的经验,这个是用 npm init 创建的。

您可以在下面看到我认为对解决问题有用的详细信息。需要帮助请叫我。 如果应用程序包含可选的链接语法,我是否可以调试该应用程序?我应该更新任何版本吗?我应该更改任何配置文件吗?

详情:
节点 v16.10.0
npm v7.24.0

package.json

  "main": "server/server.js",
  "scripts": {
    "start": "nodemon -e js,json,html,yml,css server/server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
  },
  "license": "ISC",
  "dependencies": {
    "@marsaud/smb2": "^0.17.2",
    "bcrypt": "^5.0.1",
    "body-parser": "^1.19.0",
    "compression": "^1.7.4",
    "cookie-parser": "^1.4.5",
    "cors": "^2.8.5",
    "equals": "^1.0.5",
    "express": "^4.17.1",
    "jsonwebtoken": "^8.5.1",
    "moment": "^2.24.0",
    "mongodb": "^3.6.5",
    "mssql": "^7.2.1",
    "nodemailer": "^6.4.10",
    "nodemon": "^2.0.7",
    "redoc": "^2.0.0-rc.24",
    "swagger-jsdoc": "^4.0.0",
    "tedious": "^14.0.0",
    "underscore": "^1.9.1"
  }
}

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Iniciar el programa",

            "program": "${workspaceFolder}/backEnd/server/server.js"
          }
    ],
    
}

您是否尝试切换到不同的节点版本?我使用节点 v14 没有问题,但我在其他网站上看到他们使用的是 v16 并且可选链接也有问题。

我遇到了同样的问题,将 npm 降级到版本 6.14.16 对我有用。我在搜索解决方案时 运行ning 的另一个解决方法是从 package.json 脚本命令中删除 nodemon并用 node

替换它们
"scripts": {
    "start": "node js,json,html,yml,css server/server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
},

和运行宁

nodemon --exec npm run start

虽然不确定确切的问题是什么,但它似乎与 运行 在 package.json 文件中的脚本中使用 nodemon 命令有关。我可以通过 运行ning

来验证这一点
npm run start

上面提到的 package.json 变化非常好,但是一旦它被更改为 运行 和 nodemon,我 运行 陷入了可选链接的问题。

我终于找到了解决方案,我没有使用正确的调试器,所以主要是 Visual Studio 代码错误的配置设置问题。 我最近安装了一些其他调试器,所以我不得不再次设置 node.js 调试器。