Comments (29)
@LoicMahieu: Unless you're running a modified version of graphql-js, this shouldn't be a problem if you npm dedupe
. The limitation has to do with flow type checking.
from graphiql.
Just want to mention that when importing a schema from another package, and using yarn link
in development, I run into the same problems that @LoicMahieu describes with lerna
.
Edit: I found a solution, which I wanted to share in case anyone else runs into this issue: do more linking so that each of your packages is linked to the same copy of graphql. (This also works for other dependencies that are sensitive to multiple copies, such as react.)
In this scenario, schema-package
exports a graphql schema, and server-package
imports that schema, perhaps to serve it over HTTP:
$ yarn global add graphql
$ cd ~/.config/yarn/global/node_modules/graphql && yarn link
$ cd path/to/schema-package && yarn link graphql && yarn link
$ cd path/to/server-package && yarn link graphql && yarn link schema-package
After these steps, server-package
is linked to your development copy of schema-package
, and both are linked to the same copy of graphql
. This should cause instanceof
checks in graphql code to work properly.
@leebyron You said that the error has to do with flow type-checking; but I think that is not correct. The error comes from three runtime checks that look like this:
invariant(
schema instanceof GraphQLSchema,
'Schema must be an instance of GraphQLSchema. Also ensure that there are ' +
'not multiple versions of GraphQL installed in your node_modules directory.'
);
Some options for avoiding errors like this when using lerna
, yarn link
, or npm link
could be to change the check from an instanceof
check to a check for expected properties, or to disable invariant checks if an environment variable or configuration option is set.
from graphiql.
Ok, it's related to babel 6 (babel-core). If I use [email protected] then no problem. Maybe there is a babel 6 preset that could work, I just tried with presets: ['es2015', 'stage-1', 'react']
and with presets: ['es2015']
, both without success (graphql/graphql-js#228)
from graphiql.
Find the culprit: Seems like the documentation isn't fully updated yet to reflect the recent changes in v0.2
. The solution is to follow the upgrade guide which contains more information then the server setup doc.
from graphiql.
I think this is the solution (if you're using webpack):
from graphiql.
In case this helps anyone else, I've came across this when mixing ES6 and CommonJS modules. Choosing one or the other sorted it.
from graphiql.
In my case, the issue was not having twice graphql
but twice @types/graphql
. Downgrading my apollo-client
version from ^1.9.1
to 1.9.0
solved it :
$ yarn add [email protected]
I found that by inspecting yarn.lock
file, and identifying which dependency was requiring a different version of @types/graphql
.
from graphiql.
In case it helps anyone else, I got this error when graphql
was installed as a devDependency
instead of a normal dependency
with the rest of my graphql-related packages.
from graphiql.
I'm not able to reproduce this. Please let me know if you stumble upon a clearer reason for the issue so I can help fix.
from graphiql.
I think I'm running into the same issue. I tried to use [email protected] but with no success
here is my project : https://github.com/muskacirca/graphqlserver
If anyone have an idea on what is going on, it will be great.
from graphiql.
Sometimes this occurs if you have multiple copies of graphql-js in your node_modules folder, that can happen if different parts of your app require different versions of the library.
from graphiql.
A good way to diagnose this is to run npm shrinkwrap
and then look to see if multiple copies of graphql-js
appear in the outputted file.
from graphiql.
Actually I was getting the first error : Schema must be an instance of GraphQLSchema
It was an error in how I export & import my schema.
export var Schema = new GraphQLSchema({
query: GraphQLRoot
});
import {Schema} from './schema' --> adding the brackets solve my issue
from graphiql.
@leebyron I am getting this exact error message with multiple copies of the same version of graphql in node_modules. Running npm shrinkwrap all entries ae like this: graphql: '^0.4.18'
I have two modules, both depend on graphql and one depends on the other. Is this unsupported, or could you give any pointers to what I could try?
ps. this is not related to graphiql i think, but posting here as this is the only mention i have seen of this.
from graphiql.
Unfortunately there's no work around for this at the moment. The solution is to ensure that there is exactly one copy of graphql-js in your node_modules (recursively).
The latest versions of npm (v3) should install maximally flat, so if you have multiple dependencies that require graphql, it should just be a matter of ensuring that they depend on the same version of graphql-js
from graphiql.
Thanks Lee!
from graphiql.
Is there any reason about the necessary to share the same graphql-js module ? I wanted to split my code in multiple modules, one module for graphql defintions and one other module for serving it with express-graphql. Unfortunatly, due to this limitation, this is not possible.
from graphiql.
@helfer In my case the problem is not the version. We use have several packages in the same repository and we use lerna
in development for linking packages together.
We wanted to separate schema and http related in different packages but they doesn't share the same GraphQL module in this case.
from graphiql.
I haven't used lerna
before - but due to how JavaScript's instanceof
operator works, it's unfortunately necessary to ensure only one copy of graphql
is included at runtime. I know that if you use npm
, and your multiple packages all depend on a common version of graphql
, then only a single copy will be installed. If that fails, npm dedupe
is a good tool. You should investigate if lerna
has similar capabilities.
from graphiql.
To be clear: it's certainly possible to split up your graphql definitions into multiple packages, and it's a pattern I see very often in larger codebases. The critical detail is that the package.json for each must refer to the same version of graphql
so only one copy is installed in the node_modules
directory.
from graphiql.
I have the same issue. graphql
is only installed once and my schema is a simple array of GraphQL schema language type definitions
as stated in the docs.
EDIT: Have only tested with graphiql
so far.
from graphiql.
Have you checked the way you import yoiur schema ?
export var Schema = new GraphQLSchema({query: GraphQLRoot});
import {Schema} from './schema'
from graphiql.
@muskacirca: Yes, but I'm using a type definition array. According to the docs this should work as well. Here my setup:
schema.js:
const typeDefinitions = `
type Person {
id: Int!
}
# this schema allows the following two queries:
type RootQuery {
person(id: Int): Person
}
type RootMutation {
createPerson(
name: String!
): Person
}
schema {
query: RootQuery
mutation: RootMutation
}
`;
export default [typeDefinitions];
server.js
import koa from 'koa';
import koaRouter from 'koa-router'
import { apolloKoa, graphiqlKoa } from 'apollo-server';
import schema from './graphql/schemas';
import mocks from '../data/mock';
const app = new koa();
const router = new koaRouter();
router.get('/graphiql', graphiqlKoa({
endpointURL: '/graphql'
}));
router.post('/graphql', apolloKoa({
schema,
mocks,
printErrors: true
}));
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000, () =>
console.log('GraphQL running on 3000')); // eslint-disable-line no-console
from graphiql.
Glad you figured it out
from graphiql.
Still having this problem. All recursive dependencies have the same version:
> npm --version
3.10.7
> babel-node --version
6.16.0
> find node_modules -name graphql
node_modules/graphql
node_modules/graphql-subscriptions/node_modules/graphql
> grep version node_modules/graphql/package.json
0.7.2
> grep version node_modules/graphql-subscriptions/node_modules/graphql/package.json
0.7.2
from graphiql.
@davidMuir I was afraid of this =(
I am using npm link
on a local module which appears to give babel a little bit of trouble trying to transpile, so I am mixing es6 with CommonJS...I will be happy when all this stuff settles down a bit and I can just build things =)
from graphiql.
If you're using lerna
make sure you run lerna bootstrap --hoist
so that common deps are included in the root package and shared amongst other packages.
from graphiql.
Had the same issue and turned out I have both apollo-client
and apollo-server-restify
installed under the same project. Remove apollo-client
resolves my issue
from graphiql.
@richburdon's solution worked for me. In webpack config:
resolve: {
alias: {
graphql: path.resolve('./node_modules/graphql')
}
}
from graphiql.
Related Issues (20)
- [vscode-graphql-syntax] Syntax Highlight breaks if you add a comment/description to a type HOT 1
- [graphiql] Add an option to add new tab with query
- when using onEditQuery, the explorer scroll resets to the beginning HOT 1
- [graphiql] <title>
- [graphiql] Support deprecated argument on query arguments HOT 3
- [lsp-server] 🐞 vscode code completion does not work HOT 1
- [graphiql] <title>
- Refactor LSP to enable remote schema invalidation
- [lsp-server] 🐞 regression: syntax highlighting messed up HOT 3
- [vscode-graphql] go to definition jumps to wrong line on certain condition HOT 1
- [lsp-server] 🐞 Pending response rejected since connection got disposed HOT 4
- [lsp-server] 🐞 Adding whitespaces\newlines causes autocompletion to move up a level HOT 5
- Don't export react with cdn bundle
- [graphiql] <title>MDUxRUVCM0Y3QjQwNzgwMDZDNjczQTMxMEIyRkZEMEIwMDI4MjhGMUQ0NkI4RjI5RTREMjE4QzhBM0FDNDdBOA==
- [lsp-server] Support go to definition for implementation first graphql setups HOT 1
- vscode-graphql-syntax javascript - line between graphql( and ` character breaks syntax highlighting HOT 2
- [graphiql] Grafana Embedded GraphiQL Editor CodeMirror info tooltips links navigate away from page HOT 4
- [graphiql] Fragment variables not supported HOT 4
- [graphiql] Default Value not accepted in Variable
- [graphiql] bump markdown-it for SNYK-JS-MARKDOWNIT-6483324 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphiql.