错误:无法使用来自另一个模块或领域的 GraphQLObjectType“__Directive”

Posted

技术标签:

【中文标题】错误:无法使用来自另一个模块或领域的 GraphQLObjectType“__Directive”【英文标题】:Error: Cannot use GraphQLObjectType "__Directive" from another module or realm 【发布时间】:2019-07-27 09:45:37 【问题描述】:

我正在尝试使用 Gatsby 从 GraphQL 查询数据。我按照Gatsby's 使用 GraphQL 查询页面中的数据的说明进行操作,但一直出错。

错误(这是我需要解决的比下面的示例更多的问题):

错误:无法从另一个模块使用 GraphQLObjectType "__Directive" 或领域。确保只有一个“graphql”实例 node_modules 目录。如果不同版本的“graphql”是 其他依赖模块的依赖,使用“决议” 确保只安装一个版本。https://yarnpkg.com/en/docs/selective-version-resolutions Duplicate “graphql”模块不能同时使用,因为不同 版本可能具有不同的功能和行为。数据来自 在另一个函数中使用的一个版本可以产生 令人困惑和虚假的结果。

知道为什么会这样吗?我的 node_modules 文件夹中只有一个 graphql 实例

我正在使用的示例:

我打算从 GraphQL 导入我自己的数据,但现在作为概念证明,我正在研究这个 Gatsby Rick and Morty 示例(上面的链接 - 我还没有使用 axios 演示)。

index.js 代码:

import React,  Component  from 'react'
import  graphql  from 'gatsby'

// This query is executed at build time by Gatsby.
export const GatsbyQuery = graphql`
  
    rickAndMorty 
      character(id: 1) 
        name
        image
      
    
  
`

class ClientFetchingExample extends Component 
  render() 
    const 
      rickAndMorty:  character ,
     = this.props.data

    return (
      <div style= textAlign: "center", width: "600px", margin: "50px auto" >
        <h1>character.name With His Pupper</h1>
        <p>Rick & Morty API data loads at build time.</p>
        <div>
          <img
            src=character.image
            alt=character.name
            style= width: 300 
          />
        </div>
        <h2>Image of Rick's pupper</h2>
        <p>This will come from a request on the client</p>
      </div>
    )
  


export default ClientFetchingExample

gatsby-config.js:

plugins: [
  
    resolve: "gatsby-source-graphql",
    options: 
      typeName: "RMAPI",
      fieldName: "rickAndMorty",
      url: "https://rickandmortyapi-gql.now.sh/",
    ,
  ,
...

【问题讨论】:

【参考方案1】:

我检查了https://rickandmortyapi-gql.now.sh/,发现您的查询有误。应该是这样的:

export const GatsbyQuery = graphql`
  query rickAndMorty 
    character(id: 1) 
      name
      image
    
  
`

我猜你试图进行命名查询,但创建错误。

plugins: [
  
    resolve: "gatsby-source-graphql",
    options: 
      typeName: "RMAPI",
      fieldName: "character",
      url: "https://rickandmortyapi-gql.now.sh/",
    ,
  ,

...

【讨论】:

我试过了,但都返回错误:7:5 error Cannot query field "rickAndMorty" on type "Query"【参考方案2】:

我的问题是关于 错误 而不是代码(我根据上下文请求添加了代码)。错误已解决,说明如下。

我首先检查我的yarn.lock 是否有graphql 实例。 (我有两个版本的graphql)。错误说应该只有一个。

修复它:

1) 我在 package.json 中添加了以下内容:

"resolutions": 
  "graphql": "^14.1.0"

2) 我跑了npm install

这为我解决了错误,希望对其他人有所帮助。


旁注:在终端中运行find node_modules -name graphql 来查找您的node_modules 中可能拥有的版本的另一种方法。

对我来说,它返回了两个实例(不确定 gatsby 来自哪里):

node_modules/graphql
node_modules/gatsby/node_modules/graphql

要查找版本,请使用grep version node_modules/graphql/package.json

这就是我发现我正在运行 GraphQL 14.1.0

【讨论】:

以上是关于错误:无法使用来自另一个模块或领域的 GraphQLObjectType“__Directive”的主要内容,如果未能解决你的问题,请参考以下文章

无法使用来自另一个模块或领域的 GraphQLObjectType \"Query\"

使用npm链接时,无法从其他模块或领域使用GraphQLSchema“[object GraphQLSchema]”

错误 TS4058:导出函数的返回类型具有或正在使用来自外部模块 Y 的名称 X,但无法命名

无法使用 graphq-request 表示嵌套对象输入类型的数组

来自另一个路径的模型类在 NativeScript 中引发错误调用模块

来自另一个模块的组件上的 Angular 指令输入会导致错误