Merci d'avoir signalé un problème sur Apollo Link ! Assurez-vous d'inclure les informations suivantes pour vous assurer que votre problème peut donner lieu à une action. Si vous déposez une demande de fonctionnalité, vous n'avez pas besoin de suivre le plan ci-dessous, mais veuillez inclure « idée de fonctionnalité » dans le titre et inclure un exemple spécifique dans lequel cette fonctionnalité serait utile.
Salut!
Je travaille à la mise en place d'un nouveau projet avec Apollo Client, Apollo Link, babel et webpack. J'utilise un modèle de projet assez simple pour le configurer avec les suggestions documentées dans Apollo Client. Lorsque je vais l'exécuter et lui envoyer une requête, je reçois une exception d'exécution et les requêtes ne peuvent pas passer. J'ai retracé cela à la façon dont le package zen-observable
est importé.
Résultat escompté :
Apollo Client peut effectuer une requête à l'aide d'Apollo Link, en utilisant le code suivant :
import { ApolloClient } from "apollo-client"
import { HttpLink } from "apollo-link-http"
import { InMemoryCache } from "apollo-cache-inmemory"
import { gql } from "graphql-tag"
const graphqlClient = new ApolloClient({
link: new HttpLink(),
cache: new InMemoryCache(),
})
graphqlClient.query({ query: gql`query { counter { count } }` })
.then(console.log)
.catch(console.error)
Résultat réel :
Le client Apollo lève l'exception suivante :
TypeError: _super.call is not a function
Stack trace:
ObservableQuery@webpack-internal:///16:56:21
QueryManager</QueryManager.prototype.watchQuery@webpack-internal:///94:404:16
QueryManager</QueryManager.prototype.query/resPromise<@webpack-internal:///94:431:20
QueryManager</QueryManager.prototype.query@webpack-internal:///94:429:26
ApolloClient</ApolloClient.prototype.query@webpack-internal:///93:102:16
@webpack-internal:///59:14:1
[59]<strong i="19">@http</strong>://host/assets/client.js:16:1
__webpack_require__<strong i="20">@http</strong>://host/assets/manifest.js:713:12
fn<strong i="21">@http</strong>://host/assets/manifest.js:118:20
[49]<strong i="22">@http</strong>://host/assets/client.js:7:18
__webpack_require__<strong i="23">@http</strong>://host/assets/manifest.js:713:12
webpackJsonpCallback<strong i="24">@http</strong>://host/assets/manifest.js:26:23
<strong i="25">@http</strong>://host/assets/client.js:1:1
Le ObservableQuery
importe le Observable
du projet Apollo Link, qui l'importe du package zen-observable
. Une fois transpilé en JavaScript, le package apollo-link a ceci à lib/index.js
:
import * as Observable from 'zen-observable';
export { Observable };
Il semble que cela provoque des cas étranges lors de la transpilation et de la sous-classification ultérieure de cet Observable, mais cela semble être l'endroit où la méthode call
cesse d'être disponible grâce à mon enquête.
Comment reproduire le problème :
Vous trouverez ci-joint un projet de test qui devrait démontrer le problème. Je suppose que Node.js v6 ou v8 est installé avec Yarn. Projet d'essai
yarn install
yarn run start
et ouvrez http://localhost :3000/Vous pouvez contourner ce problème en modifiant node_modules/apollo-link/lib/index.js:3
de :
import * as Observable from 'zen-observable';
à:
import Observable from 'zen-observable';
Le problème est que si vous effectuez cette modification dans le fichier .ts correspondant, cela provoque un échec du linting, et je ne sais pas comment le résoudre au mieux.
Il y a ce problème sur StackOverflow qui suggère que d'autres personnes ont ce problème.
Merci beaucoup pour votre temps, pour avoir regardé mon rapport de bogue et pour le travail impressionnant sur Apollo !
J'ai le même problème mais avec une erreur de différence.
Mon code est ici.
import 'isomorphic-fetch'
import { ApolloLink } from 'apollo-link'
import { ApolloClient } from 'apollo-client'
import { HttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
export default new ApolloClient({
link: new HttpLink({ uri: 'http://localhost:5000/api/graphql' }),
cache: new InMemoryCache()
})
Uncaught (in promise) TypeError: _apolloLink.Observable is not a constructor
at HttpLink.eval [as request] (httpLink.js:98)
at eval (link.js:60)
at ApolloLink.eval [as request] (ApolloClient.js:30)
at ApolloLink.eval [as request] (link.js:59)
at execute (link.js:94)
at eval (QueryManager.js:134)
at new Promise (<anonymous>)
at QueryManager.mutate (QueryManager.js:129)
at ApolloClient.mutate (ApolloClient.js:109)
at Header.componentDidMount (index.js:53)
J'ai essayé ce travail et j'ai eu la même erreur avec celle de @stevestreza .
```js
importer 'isomorphic-fetch'
importer * comme apolloLink depuis 'apollo-link'
importer Observable à partir de 'zen-observable'
apolloLink.Observable = Observable
````
@stevestreza @mizchi quelles versions d'apollo-client et apollo-link utilisez-vous ?
Même problème ici, avec [email protected] dans un projet webpack, résolu en supprimant le * as
dans la déclaration d'importation, comme l' a souligné
Même problème ici.
Idem ici, et j'aimerais ajouter que le problème n'est pas dans Webpack, comme écrit sur SO, mais dans Apollo et/ou TypeScript.
La raison que je sais est que j'utilise Rollup pour créer un bundle au lieu de Webpack.
Je pense qu'il s'agit d'un bogue TypeScript + Rollup mais je suis surpris qu'il ne se manifeste pas dans nos propres builds Rollup. Est-ce que quelqu'un ici serait prêt à ouvrir une pull request pour apporter la modification suggérée ci-dessus ?
Même problème ici avec Rollup. Je n'utilise pas non plus Typescript.
On dirait que TS est tout foutu. J'ai essayé de construire le module pour corriger les erreurs, mais j'obtenais des erreurs TS.
Bonjour, pardonnez ma demande, mais est-ce que quelqu'un a un correctif pendant que ce problème est en cours de résolution ? une idée de la dernière version stable ?
dans mes enquêtes jusqu'à présent, je pense que ce problème ne se produit qu'en dehors de create-react-app. il existe donc une hypothèse implicite dans create-react-app qui n'est pas documentée et qui est à l'origine de ce problème _super.call is not a function
.
Même problème ici, je viens de suivre la doc sur un tout nouveau projet et j'ai eu cette erreur. Je ne peux pas continuer avec Apollo.
en reliant simplement mon autre problème ici : https://github.com/apollographql/apollo-client/issues/2785#issuecomment -354169337 où il existe un correctif proposé (je n'ai pas testé)
je ne sais pas si c'est lié mais...
J'utilise rollup pour créer un bundle pour une application de réaction très simple. tout fonctionne bien jusqu'à ce que j'essaye d'introduire apollo-client dans le mix..
en suivant la documentation ici : https://www.apollographql.com/docs/react/basics/setup.html#installation
après avoir essayé de construire le projet avec le cumul, j'obtiens l'erreur suivante lors de la construction :
of is not exported by node_modules/zen-observable/index.js
47: return new ApolloLink(function (operation, forward) {
48: return (firstLink.request(operation, function (op) {
49: return nextLink.request(op, forward) || Observable.of();
^
50: }) || Observable.of());
51: });
node_modules/apollo-link/lib/link.js
of is not exported by node_modules/zen-observable/index.js
48: return (firstLink.request(operation, function (op) {
49: return nextLink.request(op, forward) || Observable.of();
50: }) || Observable.of());
^
51: });
52: }
node_modules/apollo-link/lib/link.js
of is not exported by node_modules/zen-observable/index.js
74: export { ApolloLink };
75: export function execute(link, operation) {
76: return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());
^
77: }
J'ai essayé de changer l'importation de node_modules/apollo-link/lib/link.js
en import Observable from 'zen-observable';
comme suggéré dans le problème connexe ci-dessus, mais cela ne semble pas résoudre le problème.
Je suis confronté à un problème avec zen-observable qui est assez différent. s'il vous plaît jeter un oeil à
https://github.com/apollographql/apollo-link/issues/389
et suggérer si je fais quelque chose de mal.
J'ai tellement de mal que je n'ai pas d'autre choix que d'utiliser le hack suivant pour contourner ce problème ...
webpack.config.js
{
test: /node_modules\/apollo-link.*?\/lib\/.*?.js/,
loader: 'string-replace-loader',
options: {
search: 'exports.Observable = Observable',
replace: 'exports.Observable = Observable.default'
}
},
J'aimerais vraiment pouvoir obtenir de l'aide ici pour pouvoir supprimer ce hack...
PS Je n'utilise pas TypeScript mais juste babel. Je ne sais pas si c'est la raison pour laquelle il est cassé pour moi
J'obtiens la même erreur sans tapuscrit et je peux garantir que faire le changement
import * as Observable from 'zen-observable';
à:
import Observable from 'zen-observable';
résout le problème
putain @kinyat, je ne
Même problème dans une application Hello World basique avec react-apollo
et parcel-bundler
. Une solution légale ?
@alapini Je pense que l'une des solutions "légales" est qu'Apollo fournisse aux utilisateurs non dactylographiés (c'est-à-dire Babel) une version ES5 du compilateur ts.
J'utilise apollo pour mon plugin vuex-orm-apollo et la modification des fichiers dans le node_modules
n'est pas une option viable pour moi. Une correction de bug bientôt serait vraiment sympa ! :)
avec la dernière version de typescript, les importations peuvent être exprimées dans la syntaxe normale des modules es, donc peut-être que si nous attendons tous qu'Apollo mette à jour la version dactylographiée, cela fonctionnera immédiatement pour nous non utilisateurs de TS.
Je pense que je rencontre certains des problèmes énumérés ici. Première fois que j'utilise apollo, je ne suis donc pas sûr à 100% de connecter les choses correctement. J'utilise rollup sans tapuscrit avec inferno.
The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten
The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten
The 'this' keyword is equivalent to 'undefined' at the top level of an ES module, and has been rewritten
'of' is not exported by 'node_modules/zen-observable/index.js'
'of' is not exported by 'node_modules/zen-observable/index.js'
'of' is not exported by 'node_modules/zen-observable/index.js'
(node:37350) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: 'print' is not exported by node_modules/graphql/language/printer.js
(node:37350) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code
Pour ceux qui utilisent parcel.js, ce PR semble temporairement résoudre le problème : https://github.com/parcel-bundler/parcel/pull/530
Je n'ai pas plongé trop profondément dans ce problème, mais il semble que le cœur du problème, comme le note @fathyb ici , soit :
Le comportement actuel de Babel est tout à fait correct et respecte la spécification ES6. L'importation d'une exportation par défaut avec un caractère générique est illégale, les erreurs ici sont donc légitimes.
Cependant, les gens ( #418 ) et les bibliothèques (antd, @blueprintjs/core, etc.) comptent toujours sur cela. L'idée est d'être plus tolérant en assouplissant la spécification sur les espaces de noms exotiques.
Il semble donc que la solution de contournement publiée par @stevestreza (suppression de * as
) soit une solution légitime pour apollo-link, non ?
Fwiw, je recevais l'erreur _apolloLink.Observable is not a constructor
, et elle disparaît si j'utilise le parcel.js PR noté ci-dessus (ou reviens à parcel.js 1.2.1 comme indiqué dans apollo-client/issues/2785 )
J'ai également ce problème en utilisant Rollup dans un projet Vuejs.
merci pour le partage @tadas412
Le PR ci-dessus a été publié en 1.2.0. Faites-moi savoir si ce n'est toujours pas résolu !
toujours une erreur avec 1.2.0 😢
TypeError: _super.call is not a function
at new ObservableQuery
at QueryManager.watchQuery
at eval
at new Promise
at QueryManager.query
at ApolloClient.query
at VueComponent.created
cela semble également être suivi ici apollographql/apollo-client/issues/2785
Pour moi, cela fonctionne avec la 1.2.0.
@littletower Cela peut sembler stupide, mais êtes-vous sûr que vous utilisez la version 1.2.0 ? Supprimez peut-être le répertoire node_modules et réinstallez les packages ? Je ne faisais que demander :)
@phortx ouais je l'ai déjà fait :(
Je pourrais ajouter que j'utilise des abonnements, je ne sais pas si cela change quelque chose
@littletower C'est étrange. J'obtenais la même erreur avec 1.1.0 et 1.2.0 semblaient le résoudre. apollo-client
a une dépendance sur apollo-link
, il se peut donc que sa dépendance n'ait pas été mise à jour. Pouvez-vous créer un dépôt de reproduction?
Le changement a définitivement résolu le problème réel au niveau du code, mais il semble que yarn
provoque un conflit.
npm install
pour installer les dépendances, il charge apollo-link
1.2.0 sans aucun changement par rapport à apollo-client
. Cela fonctionne très bien et le problème signalé ne se produit plus. (Vous devez installer manuellement graphql-tag
et supprimer les accolades dans l'import dans src/client/index.js
pour le vérifier)yarn install
, il installe la version apollo-link
1.0.0. Lorsque je yarn add apollo-link
pour installer explicitement la 1.2.0, la version dans node_modules/apollo-link
devient 1.2.0, mais une autre version de apollo-link
1.0.0 est installée à node_modules/apollo-client/node_modules/apollo-link
.J'ai dépassé mes connaissances à ce stade sur la façon dont le fil fonctionne pour résoudre ce problème (je m'attendrais à ce qu'il ait installé apollo-link
1.2.0, pas 1.0.0). Je suppose que le "bon" correctif consiste à exiger apollo-link
1.2.0 dans le package.json pour apollo-client
. Je vais déposer une note dans apollographeql/apollo-client#2785.
Quoi qu'il en soit, cela semble complètement corrigé ici!
@evans J'ai créé un
J'obtiens la même erreur dans un projet Polymer 3 et apollo-boost
:
import { HttpLink } from 'apollo-link-http';
cause
Uncaught SyntaxError: The requested module '../../zen-observable/index.js'
does not provide an export named 'default'
@heruan Avez-vous trouvé une solution ? Je suis confronté au même problème.
Commentaire le plus utile
J'ai tellement de mal que je n'ai pas d'autre choix que d'utiliser le hack suivant pour contourner ce problème ...
webpack.config.js
J'aimerais vraiment pouvoir obtenir de l'aide ici pour pouvoir supprimer ce hack...
PS Je n'utilise pas TypeScript mais juste babel. Je ne sais pas si c'est la raison pour laquelle il est cassé pour moi