2017-04-21 14 views
0

私はモジュールAにローカルスコープのすべてに、モジュールBへのアクセスを提供したいモジュールAにモジュールBをインポートしようとしているにそれを渡すアクセスモジュールthis` `でローカルスコープとインポートモジュール

WebPACKの前に、私はこのようにそれをやった:

var scope = this; 

その後、私はこの

if (!('blah' in scope)) { 
      throw new Error('method of "' + 'blah' + '" not in scope') 
} 

のような実体の存在を確認するだろう、私はまたを行うことによって、モジュールBからモジュールAで物事を設定することができるだろう

これはwebpackで可能ですか?

1つのデフォルトのオブジェクトや多くの名前のアイテムをエクスポートすることが、私はDefinePluginProvidePluginてみましたが、私はモジュールA

答えて

1

の範囲に、モジュールBへのアクセスにモジュールを与えるように見えることはできません。

それはデフォルトモジュールのエクスポートです:

const MyClass = (props) => (
    <div/> 
) 

export default MyClass 

我々はこのようにそれをインポートすることができます。

import MyClass from "../actions" 

中括弧という名前のアイテムをエクスポートすることができますので、私たちは、このような輸出を持っている場合:

const myConst = "The Text" 
const myHelper = (num) => 2*num 

export default MyClass 
export {myHelper, myConst} 

このようにインポートできます。

import MyClass, {myHelper, myConst} from "../actions" 

パスにインデックスを追加する必要はありません。デフォルトではaddです。 "../actions/index"ではなく "../actions"と書いてください

2つのモジュールのエクスポートされた要素を互いにインポートすることができます。

テストの目的で、rewireモジュールはエクスポートの制限を回避するのに役立ちます。

EDIT(コメントの後): 私はそのようなコードを試してみてください。

# scope.js 
var data = ['The data'] 
var value = 'The value' 
var scope = this 
var fn = function(){ return scope } 
console.log(scope) 
export { scope, value, fn } 

# index.js 
import { scope, fn } from './scope' 
console.log(scope) 
console.log(scope.data) 
console.log(fn()) 

結果は次のとおりです。

{ a: [Getter], b: [Getter] } 
{ a: [Getter], b: [Getter] } 
undefined 
{ a: [Getter], b: [Getter] } 

'' scope変数であり、 'B' fn機能です。パッケージは強く隔離されているようです。

+0

ここでES6ガイドをお寄せいただきありがとうございますが、私の質問は異なります。私は、インポートされたモジュールに、インポートされた場所のスコープにアクセスするために何かを与える必要があります。 – Noitidart

+0

私はいくつか試して、答えに追加します。それをベースとして(他に依存することなく)、生成されたバンドルを見てみましょう。あなたが解決策を見つけたかもしれませんが、答えやフィードバックを残してください。 – user394010

+0

あなたの実験結果は私のものと同じです。スコープは強く隔離されています。私はスコープをタップしようとしています、それは私の質問です。 – Noitidart

関連する問題