2017-03-24 12 views
3

私はes6モジュールを使っています。それらの中にはロダッシュを使っているものもあります。私の質問は、グローバル変数としてlodashをロードすることが可能か、それとも別々にすべてのファイルにインポートするかです。またES6とウィンドウ/グローバル変数

import lodash from 'lodash'; 
window._ = lodash; 

この方法:私は私のイニシャライザでこれを試してみました

window._ = require('lodash'); 

しかし、それは動作しません。

TypeError: Cannot read property 'truncate' of undefined

+4

すべてのファイルを別々にインポートすることをお勧めします。モジュールのインポートのポイントは、依存関係を明確にすることです。 – gyre

+0

ありがとうございます。 –

+0

また、複数のスクリプトにモジュールを含めると、モジュールが重複しないようにシングルトンとしてロードされます。 –

答えて

4

はこれを見て、あなたが使用しているWebPACKのを許可する3つの方法があります。私のモジュールでは私が使用、例えば、_.truncateエラーが発生します。

  1. windowオブジェクトはまだ利用可能です。あなたの例のように、最初にイニシャライザがロードされていることを確認してから、ウインドウオブジェクトにアンダースコアを付けることができます。モジュールではwindow._.truncateとして使用できます。ここに欠点があることがわかります:1)読み込み順序の依存関係があります。 2)ウィンドウオブジェクトに依存しています。 3)使い方が良くない。

  2. underscoreを必要なモジュールに直接インポートできます。

  3. webpackを使用すると、プラグインを定義してグローバル変数を定義することができますhttps://webpack.js.org/plugins/define-plugin/次にすべてのモジュールで_.truncateを自由に使用できます。

モジュールが必要な場合は、#2を使用します。それを頻繁に使用することを望むなら#3がより便利になります。 #1は常に醜いですが、あなたのケースは明らかにそうではありませんが、まれにこのような回避策が役立つかもしれません。