You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用graphql-tools的makeExecutableSchema时出现语法错误求助

问题描述

我正在学习创建GraphQL服务器,尝试使用graphql-tools创建可执行schema,但运行示例代码时返回语法错误,操作系统为Windows10。错误栈显示在@graphql-tools/utils的helpers.js文件中出现Unexpected token '.'错误。我的代码是一个基础Express服务器,使用makeExecutableSchema的示例代码,同时尝试Yoga GraphQL服务器时也出现类似语法错误,怀疑是否安装有误,请求解答。

错误栈信息

C:\Users\tranv\Documents\frontendMentor\link-sharing-app\node_modules\@graphql-tools\utils\cjs\helpers.js:46
        name = a.alias?.value;
                       ^

SyntaxError: Unexpected token '.'
    at wrapSafe (internal/modules/cjs/loader.js:1053:16)
    at Module._compile (internal/modules/cjs/loader.js:1101:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Module.require (internal/modules/cjs/loader.js:1025:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (C:\Users\tranv\Documents\frontendMentor\link-sharing-app\node_modules\@graphql-tools\utils\cjs\index.js:5:22)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)

我的代码

const express = require('express');
const port = 5000;
const makeExecutableSchema = require('@graphql-tools/schema');

const executableSchema = makeExecutableSchema({
  typeDefs: schema,
  resolvers: {
    Query: {
      hello: () => 'Hello, world!',
    },
  },
});

const app = express();
app.listen(port, console.log(`Server running on port ${port}`));

解决方案

核心原因

错误里的?.是ES2020引入的可选链操作符,你当前使用的Node.js版本不支持这个语法,导致编译失败。

解决步骤

  1. 升级Node.js版本
    直接把Node.js升级到14.x及以上版本(可选链在Node.js 14.0.0及以上被完全支持),升级后重新安装依赖即可解决。

  2. 安装兼容旧Node版本的依赖包
    如果暂时无法升级Node.js,可以指定安装@graphql-tools/utils的旧版本,比如:

    npm install @graphql-tools/utils@8.10.1
    

    这个版本的代码未使用可选链语法,能兼容更低版本的Node.js。

  3. 修复代码中的未定义变量问题
    你的代码里typeDefs: schema中的schema变量未定义,需要补充GraphQL类型定义,示例如下:

    const express = require('express');
    const port = 5000;
    const makeExecutableSchema = require('@graphql-tools/schema');
    
    // 补充类型定义
    const schema = `
      type Query {
        hello: String
      }
    `;
    
    const executableSchema = makeExecutableSchema({
      typeDefs: schema,
      resolvers: {
        Query: {
          hello: () => 'Hello, world!',
        },
      },
    });
    
    const app = express();
    app.listen(port, console.log(`Server running on port ${port}`));
    

内容的提问来源于stack exchange,提问作者Vinh Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 01:46:23