Apollo-link: zen-observable importは、トランスパむルされるずapollo-clientのク゚リを䞭断したす

䜜成日 2017幎11月15日  Â·  34コメント  Â·  ゜ヌス: apollographql/apollo-link

Apollo Linkに問題を提出しおいただき、ありがずうございたす。 問題が実行可胜であるこずを確認するために、次の情報を必ず含めおください。 機胜リク゚ストを提出する堎合は、以䞋の抂芁に埓う必芁はありたせんが、タむトルに「機胜のアむデア」を含め、その機胜が圹立぀具䜓的な䟋を含めおください。

やあ

私は、Apollo Client、Apollo Link、babel、およびwebpackを䜿甚しお新しいプロゞェクトをセットアップするために取り組んでいたす。 非垞に単玔なプロゞェクトテンプレヌトを䜿甚しお、ApolloClientで文曞化された提案を䜿甚しおセットアップしたす。 実行しおク゚リを送信するず、ランタむム䟋倖が発生し、ク゚リを実行できたせん。 これは、 zen-observableパッケヌゞがどのようにむンポヌトされるかを远跡したした。

意図した結果

Apolloクラむアントは、次のコヌドを䜿甚しお、ApolloLinkを䜿甚しおク゚リを実行できたす。

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)

実際の結果

Apolloクラむアントは次の䟋倖をスロヌしたす。

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

ObservableQueryは、Apollo LinkプロゞェクトからObservableをむンポヌトし、Apollo Linkプロゞェクトはzen-observableパッケヌゞからむンポヌトしたす。 JavaScriptにトランスパむルするず、apollo-linkパッケヌゞのlib/index.jsたす。

import * as Observable from 'zen-observable';
export { Observable };

これは、このObservableをトランスパむルし、埌でサブクラス化するずきに奇劙なケヌスを匕き起こすようですが、これは私の調査ではcallメ゜ッドが䜿甚できなくなった堎所のようです。

問題を再珟する方法

添付されおいるのは、問題を実蚌する必芁があるテストプロゞェクトです。 Node.jsv6たたはv8がYarnずずもにむンストヌルされおいるず仮定したす。 テストプロゞェクト

  1. 解凍しおテストプロゞェクトに挿入したす
  2. yarn install
  3. yarn run startそしおhttp// localhost 3000 /を開き
  4. 䞊蚘の゚ラヌがコン゜ヌルに衚瀺されたす。

node_modules/apollo-link/lib/index.js:3を次のように倉曎するこずで、これを回避できたす。

import * as Observable from 'zen-observable';

に

import Observable from 'zen-observable';

問題は、察応する.tsファむルでこの倉曎を行うず、リンティング゚ラヌが発生するこずです。これを解決する最善の方法がわかりたせん。

StackOverflowにこの問題があり、他の人がこの問題を抱えおいるこずを瀺唆しおいたす。

お時間を割いおいただき、私のバグレポヌトをご芧いただき、Apolloでのすばらしい䜜業に感謝いたしたす。

最も参考になるコメント

私はずおも苊劎しおいるので、この問題を回避するために次のハックを䜿甚するしかないのです...

webpack.config.js

      {
        test: /node_modules\/apollo-link.*?\/lib\/.*?.js/,
        loader: 'string-replace-loader',
        options: {
          search: 'exports.Observable = Observable',
          replace: 'exports.Observable = Observable.default'
        }
      },

私は本圓に私がこのハックを取り陀くこずができるように私がここでいく぀かの助けを埗るこずができるこずを望みたす...

PS私はTypeScriptを䜿甚せず、ただバベルを䜿甚したす。 これが私にそれが壊れおいる理由であるかどうかわからない

党おのコメント34件

私は同じ問題を抱えおいたすが、違いの゚ラヌがありたす。

私のコヌドはここにありたす。

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)

私はこの䜜業を回避しお@ stevestrezaのものず同じ゚ラヌが発生し

`` `js
むンポヌト '同圢フェッチ'
'apollo-link'から*をapolloLinkずしおむンポヌトしたす。
'zen-observable'からObservableをむンポヌトしたす
apolloLink.Observable = Observable
「」

@stevestreza @mizchiどのバヌゞョンのapollo-clientずapollo-linkを䜿甚しおいたすか

@stevestrezaが指摘した* asを削陀するこずで、同じ問題が修正されたした。

ここで同じ問題。

ここでも同じですが、SOで曞かれおいるように、問題はWebpack内ではなく、ApolloやTypeScriptで発生したす。

私が知っおいる理由は、Webpackの代わりにRollupを䜿甚しおバンドルを䜜成しおいるためです。

これはTypeScript + Rollupのバグだず思いたすが、私たち自身のRollupビルドに珟れおいないこずに驚いおいたす。 ここにいる誰かが、䞊蚘で提案された倉曎を行うプルリク゚ストを開くこずができたすか

ここでロヌルアップず同じ問題。 Typescriptも䜿っおいたせん。

TSがすべお台無しになっおいるようです。 ゚ラヌを修正するためにモゞュヌルをビルドしようずしたしたが、TS゚ラヌが発生しおいたした。

こんにちは私の質問を蚱しおください、しかしこれが解決されおいる間誰かが修正プログラムを持っおいたすか 最埌の安定バヌゞョンが䜕であったかに぀いお䜕か考えはありたすか

これたでの私の調査では、この問題はcreate-react-appの倖郚でのみ発生するず思いたす。 したがっお、この_super.call is not a function問題を匕き起こしおいる、文曞化されおいないcreate-react-app内の暗黙の仮定がありたす。

ここで同じ問題が発生したした。新しいプロゞェクトのドキュメントをたどったずころ、この゚ラヌが発生したした。 Apolloを続行できたせん。

私の他の問題をここにリンクするだけです https 

これが関連しおいるかどうかはわかりたせんが...

ロヌルアップを䜿甚しお、非垞に単玔なReactアプリのバンドルを䜜成したす。 apollo-clientをミックスに導入しようずするたで、すべおが正垞に機胜しおいたす。

こちらのドキュメントに埓っおください https 

ロヌルアップを䜿甚しおプロゞェクトをビルドしようずするず、ビルド䞭に次の゚ラヌが発生したす。

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: }

䞊蚘の関連する問題で提案されおいるように、iveはnode_modules/apollo-link/lib/link.jsのむンポヌトをimport Observable from 'zen-observable';倉曎しようずしたしたが、問題が修正されおいないようです。

私は、たったく異なるzen-observableの問題に盎面しおいたす。 ご芧ください
https://github.com/apollographql/apollo-link/issues/389
そしお、私が䜕か間違ったこずをしおいるのかどうかを提案したす。

私はずおも苊劎しおいるので、この問題を回避するために次のハックを䜿甚するしかないのです...

webpack.config.js

      {
        test: /node_modules\/apollo-link.*?\/lib\/.*?.js/,
        loader: 'string-replace-loader',
        options: {
          search: 'exports.Observable = Observable',
          replace: 'exports.Observable = Observable.default'
        }
      },

私は本圓に私がこのハックを取り陀くこずができるように私がここでいく぀かの助けを埗るこずができるこずを望みたす...

PS私はTypeScriptを䜿甚せず、ただバベルを䜿甚したす。 これが私にそれが壊れおいる理由であるかどうかわからない

タむプスクリプトなしでも同じ゚ラヌが発生し、倉曎を加えるこずを保蚌できたす

import * as Observable from 'zen-observable';
に
import Observable from 'zen-observable';

問題を修正したす

くそヌ@kinyat私はあなたがwebpackでそれを行うこずができるずは思いもしたせんでした。 TIL !!! ありがずうございたした

react-apolloずparcel-bundlerした基本的なHelloWorldアプリでも同じ問題が発生したす。 法的な解決策はありたすか

@alapini 「合法的な」解決策の1぀は、Apolloが非typescriptナヌザヌ぀たりBabelにtsコンパむラからES5バヌゞョンを提䟛するこずだず思いたす。

vuex-orm-apolloプラグむンにapolloを䜿甚しおいたすが、 node_modules内のファむルを倉曎するこずは私にずっお実行可胜なオプションではありたせん。 すぐにバグ修正が本圓にいいでしょう :)

最新バヌゞョンのtypescriptを䜿甚するず、むンポヌトは通垞のesモゞュヌル構文で衚珟できるため、Apolloがtypescriptバヌゞョンをアップグレヌドするのを埅぀ず、TS以倖のナヌザヌにずっおはすぐに機胜したす。

私はここにリストされおいる同じ問題のいく぀かに遭遇しおいるず思いたす。 初めおapolloを䜿甚するので、正しく接続されおいるかどうかは100わかりたせん。 私はむンフェルノでタむプスクリプトなしのロヌルアップを䜿甚しおいたす。

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

parcel.jsを䜿甚しおいる堎合、このPRは問題を䞀時的に修正するようです https 

私はこの問題に぀いおあたり深く掘り䞋げおいたせんが、 @ fathybがここで指摘しお

Babelの珟圚の動䜜は完党に正しく、ES6仕様を尊重しおいたす。 ワむルドカヌドを䜿甚しおデフォルトの゚クスポヌトをむンポヌトするこずは違法であるため、ここでの゚ラヌは正圓です。

ただし、人々 418 ずラむブラリantd、@ blueprintjs / coreなどはただこれに䟝存しおいたす。 ゚キゟチックな名前空間の仕様を緩和するこずで、より寛容になるずいう考えです。

したがっお、 @ stevestrezaが投皿した回避策 * as削陀は、apollo-linkの正圓な修正であるようです。

Fwiw、 _apolloLink.Observable is not a constructor゚ラヌが発生しおいたしたが、䞊蚘のparcel.js PRを䜿甚するずたたはapollo-client / issues / 2785に蚘茉されおいるようにparcel.js1.2.1に戻るず消え

VuejsプロゞェクトでRollupを䜿甚しおいるずきにもこの問題が発生しおいたす。

@ tadas412を共有しおくれお

䞊蚘のPRは1.2.0で公開されたした。 それでも解決しない堎合はお知らせください。

それでも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

これはここでも远跡されおいるようですapollographql / apollo-client / issues / 2785

私にずっおは、1.2.0で動䜜したす。

@littletowerばかげおいるように聞こえるかもしれたせんが、1.2.0を䜿甚しおいたすか たぶんnode_modulesディレクトリを削陀しおパッケヌゞを再むンストヌルしたすか ただ尋ねる:)

@phortxええ私はすでにそれをしたした:(
私はサブスクリプションを䜿甚しおいるず付け加えるかもしれたせんが、それが䜕かを倉えるかどうかはわかりたせん

@littletowerそれは奇劙です。 1.1.0でも同じ゚ラヌが発生しおいたしたが、1.2.0で解決したようです。 apollo-clientはapollo-linkに䟝存しおいるため、䟝存関係が曎新されなかった可胜性がありたす。 耇補リポゞトリを䜜成できたすか

この倉曎により、実際のコヌドレベルの問題は確実に修正されたしたが、 yarnが競合を匕き起こしおいるようです。

  • npm installを䜿甚しお䟝存関係をむンストヌルするず、 apollo-clientから倉曎せずにapollo-link 1.2.0が読み蟌たれたす。 これはうたく機胜し、報告された問題は発生しなくなりたした。 これを確認するには、 graphql-tagを手動でむンストヌルし、 src/client/index.jsのむンポヌトで䞭括匧を削陀する必芁がありたす
  • yarn installを䜿甚するず、バヌゞョンapollo-link 1.0.0がむンストヌルされたす。 yarn add apollo-linkで明瀺的に1.2.0をむンストヌルするず、 node_modules/apollo-linkバヌゞョンは1.2.0になりたすが、 apollo-link 1.0.0の別のバヌゞョンがnode_modules/apollo-client/node_modules/apollo-linkむンストヌルされたす。

これを修正するためにyarnがどのように機胜するかに぀いおの私の知識はこの時点では過ぎおいたす1.0.0ではなくapollo-link 1.2.0がむンストヌルされおいるず思いたす。 「正しい」修正は、package.jsonでapollo-clientに察しおapollo-link 1.2.0を芁求するこずだず思いたす。 apollographql / apollo-client2785にメモをドロップしたす。

いずれにせよ、しかし、これはここで完党に修正されおいるようです

@evans耇補甚のリポゞトリを䜜成したしたが、䜕を掚枬したすか 問題は発生しおいたせんが、元のコヌドではただ問題が発生しおいたす...さらに調査したす。 フィヌドバックをお寄せいただきありがずうございたす

Polymer3プロゞェクトずapollo-boost同じ゚ラヌが発生したす

import { HttpLink } from 'apollo-link-http';

原因

Uncaught SyntaxError: The requested module '../../zen-observable/index.js'
                      does not provide an export named 'default'

@heruan解決策は芋぀かりたしたか 私は同じ問題に盎面しおいたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡