2017-05-08 4 views
0

は、私が持っているものです。webpack - imports-loaderとProvidePlugin:同様ですが同じではありませんか?ここ

a.js

$(() => { 
    $.x = 42; 
    console.log('hello from a'); 
}); 

b.js

$(() => { 
    console.log($.x); 
    console.log('hello from b'); 
}); 

index.htmlを

<!DOCTYPE html> 
<meta charset="utf-8"> 
<body> 
<script src="/vendor.js"></script> 
<script src="/a.js"></script> 
<script src="/b.js"></script> 

私の質問は、以下の両方のウェブパック構成はまったく同じ結果を達成するのですか?

[1](インポート・ローダ付き)webpack.config.js

const config = { 
    entry: { 
    a: './a.js', 
    b: './b.js', 
    vendor: [ 
     'jquery', 
    ], 
    }, 
    module: { 
    rules: [ 
     { 
     test: /(a|b)\.js$/, 
     use: 'imports-loader?$=jquery', 
     }, 
    ], 
    }, 
}; 

を[2](ProvidePluginで)webpack.config.js

const config = { 
    entry: { 
    a: './a.js', 
    b: './b.js', 
    vendor: [ 
     'jquery', 
    ], 
    }, 
    plugins: [ 
    new webpack.ProvidePlugin({ 
     $: 'jquery', 
    }), 
    ], 
}; 

場合、それらは同じではありませんが、同じものではありません。

はまた、b.jsに、$.xは、undefinedに等しく、これは$異なるjQueryのオブジェクトを指す意味しますか?もしそうなら、どうすれば同じ(グローバル)jQueryインスタンスを参照できるのでしょうか?

答えて

0

imports-loaderは、親ローダの実行時にのみインポートされます。 (あなたの場合、jsファイルのみ)。インポートされたファイルは、親に「接続」されています。

ProviderPluginは "グローバル"名前空間にインポートし、インポートするものはどこでも使用可能にします。これは通常、jqueryのようなスタンドアロンのライブラリに使用されます。

類似していますが、同じではありません。

関連する問題