给出以下代码:
import { graphql } from 'graphql'
import graphqlTools from 'graphql-tools'
const { makeExecutableSchema } = graphqlTools
const typeDefs = `
type Query {
as: [A]
}
type A {
x: Int,
y: Int
}
`
const schema = makeExecutableSchema ({ typeDefs })
graphql(schema, '{ as { x, y } }').then(console.log)
我收到此错误:
错误:无法从另一个使用GraphQLSchema“ [object GraphQLSchema]” 模块或领域。
确保仅在“ graphql”的一个实例 node_modules目录。如果不同版本的“ graphql”是 其他依赖模块的依赖关系,请使用“分辨率”来确保 仅安装了一个版本。
这是怎么回事?
答案 0 :(得分:8)
当您安装的graphql
模块的版本与graphql-tools
安装和使用的版本不同时,也会发生这种情况。
我发现您可以通过以下任一方法纠正此问题:
更改项目graphql
文件中package.json
的版本,使其与graphql-tools
文件中package.json
所依赖的文件完全匹配。
删除graphql
作为依赖项,然后仅安装graphql-tools
。然后,您将自动收到graphql
安装的任何graphql-tools
模块版本(只要您不依赖于安装任何其他冲突版本的其他软件包)。
在其他情况下,您可能具有正确的版本,但可能已安装多次。您可以使用npm ls graphql
查看所有已安装的版本。尝试运行npm dedupe
删除重复的安装。
答案 1 :(得分:2)
发生这种情况是因为graphql-tools
模块从其CommonJS模块导入graphql
,而我的代码是从ES模块执行的。也就是说,我自己的模块中的每个对象都来自ES模块,而graph-tool
不是。
就像从graphql
导入CommonJS模块一样简单,并且graphql
和graphql-tools
的两个对象都可以一起交谈:
import graphql_ from 'graphql/index.js'
import graphqlTools from 'graphql-tools'
const { graphql } = graphql_
const { makeExecutableSchema } = graphqlTools
const typeDefs = `
type Query {
as: [A]
}
type A {
x: Int,
y: Int
}
`
const schema = makeExecutableSchema ({ typeDefs })
graphql(schema, '{ as { x, y } }').then(console.log)
答案 2 :(得分:0)
我的问题是 .js
和 .mjs
graphql 文件都因 webpack 配置错误而得到解决。
根本原因:
从 TypeMapper.mjs
中的 graphql-compose
文件,import 语句没有文件扩展名,这是 webpack 包的失败。为了解决这个问题,我需要将 fullySpecified:false
添加到 webpack 配置中。
{
test: /\.m?js/,
include: /node_modules/,
type: "javascript/auto",
resolve: {
fullySpecified: false
}
}
我还修改了解析语句
resolve: {
extensions: [".ts", ".js", ".mjs"] // that was the actual problem
}
由于 fullySpecified
配置已设置为 false
,因此 webpack 尝试按照 resolve.extentions
配置的顺序解析没有扩展名的文件。由于该配置中的顺序错误,尽管所有其他文件都使用 graphql
一个,但 .js
文件与 .mjs
ext 正在解析。
解决方案:
只需将 resolve.extensions
配置重新排序为
resolve: {
extensions: [".ts", ".mjs", ".js"]
}
答案 3 :(得分:0)
当我的 .npmrc 没有正确的条目(例如用户名和密码)时,我得到了这个确切的错误。我们正在使用 jFrog 来规范包安装。 .npmrc 应位于具有正确条目的根目录下。 例如: .npmrc 文件有效
@<company-name>:registry=<registry-url>
//<artifactory-name>:_password=${PASSWORD}
//<artifactory-name>:username=${JFROG_USERNAME}
//<artifactory-name>:email=${YOUR_EMAIL}
//<artifactory-name>:always-auth=true