2017-03-01 1 views
2

私は馴染みのないシナリオに遭遇しました。私のReactプロジェクトでは、サードパーティのベンダーのapiファイルをインポートしました。ただし、ベンダーのapiは含まれていないQ promiseライブラリを使用して内部コールを行います。 APIはwindow.Qが設定され、APIの直接の依存関係になると予想しています。私は、ソースファイルの先頭にベンダーファイルをインポートし、それを使用する場合、それはこのエラーをスローしないように適切にウィンドウ上でこれを設定する方法を見つけ出すように見えることはできません。ReactJS - ウィンドウのプロパティを設定するには?

TypeError: undefined is not an object (evaluating '$q.defer')

global-variables.js:

注:dsは、消費者が電話をかけるためにファイルに作成したグローバル変数であるため、このファイルにベンダーライブラリをインポートしました。

import '../../vendor/vendor-library'; 

const globals = { 
    DATA_SERVICE: ds, 
}; 

export default globals; 

user.jsの:

import globals from '../globals/global-variables'; 

const userApi = { 
    getCurrentUser() { 
     return globals.DATA_SERVICE.getDataForCurrentObject('User', 'ID'); 
    }, 
}; 

export default userApi; 

私は私のプロジェクトのエントリポイントの先頭にこれをやってみましたが、それは問題を解決しませんでした:

index.js:

import q from 'q'; 
window.Q = q; 

ご協力いただければ幸いです。

+0

かなり悪いライブラリのようです。それが必要な場合を除いて、私はおそらくそこに何か良いものがあるかどうかを再評価するでしょう。あなたのアプリケーションは、あなたの最も安心な依存関係と同じくらい安全です。 –

+0

FWIW、まだ使用する必要がある場合は、おそらくこの記事のようにすることができます:https://github.com/webpack/webpack/issues/ 542 –

+0

Hey Slider私はあなたのコードを調べています。あなたが働いているベンダーのAPIについてもっと詳しく知ることができれば役に立ちます。 「Q」が「必要」というやり方で使われているのを見るのは奇妙です。一般的に私がよく知っている 'q'はnpmモジュールです。 package.json内に存在するモジュール。 –

答えて

1

webpackなどの拡張子を使用するか、JavaScriptをバンドルしてグローバルとしてQを提供するために使用している他のバンドラを使用することをお勧めします。 WebPACKので

これはwebpack.ProvidePlugin

例で行うことができます。この場合"q"

module.exports = { 
    module : { 
     ... 
    }, 
    plugins : [ 
     new webpack.ProvidePlugin({ 
      Q: "q", 
      "window.Q": "q", 
     }), 
    ], 
}; 

は、あなたのプロジェクトへの依存関係として追加する必要がありますされ、Q library from npmの名前です。

+0

チャームのように働いた。ありがとう! – kkSlider

関連する問題