2017-12-18 17 views
2

私は、次のの解決のエクスポート/インポート

(function(){ 

    window.GlobalObject = { 
     foo : function() { console.log("bar"); } 
    } 

})(); 

ようなものでNamespacing.jsを持って、私はので、私は今のWebPACKにバンドルしていると私は別だったMyScript.js

GlobalObject.newAttribute = { ... } 

を持っていますこの上でモジュールを使用するtryng、しかし私はそうすることができませんでした。 Namespacing.jsで

私は最後に追加:

export default GlobalObject; 

それから私はMyScript.js

import GlobalObject from "Namespacing" 

でそれをインポートするにはしようと試みた。しかし、その後、私のWebPACKは私にエラー

[14:58:44] GulpUglifyError: unable to minify JavaScript 
Caused by: SyntaxError: Unexpected token: name (Kneat) (line: 1, col: 7, pos: 7) 
を取得

any1はこのエクスポート/インポートを実行する良い方法を知っていますか?

+1

もし 'export'文をIIFEの中に入れたとしても、それは違法です(トップレベルでしかインポート/エクスポートできません)。外側に置くと、 'GlobalObject'へのアクセスはありません。 IIFEを取り外します。 –

答えて

3

import/exportに切り替えるには、既存のファイルにexportsを追加するだけではなく、その構造を(少しだけ)変更する必要があります。例えば

、Namespacing.jsはどちらかだろう。

export const GlobalObject = { 
    foo : function() { console.log("bar"); } 
}; 

...という名前のシンボルGlobalObjectをエクスポートします。

(インポートモジュールに局所的に異なる名前を望んでいた場合は、as句を使用することができます。)

import { GlobalObject } from './Namespacing.js'; 

それともデフォルト輸出として、そのオブジェクトをエクスポートすることができます:それは次のようにインポートされます:

export default { 
    foo : function() { console.log("bar"); } 
}; 
...とこのようにそれをインポートします。

import GlobalObject from './Namespacing.js'; 

この場合、インポートするモジュール内でGlobalObjectに任意の名前を使用できます(as節の必要はありません)。


IIFEを削除することを心配しないでください。モジュールは本質的にスコープがあり、モジュールコードはグローバルスコープで実行されません。

+0

私はこの方法を試してみましたので、私のモジュールをエクスポートしました。問題はWebObjects上でGlobalObjectを実際にグローバル化しているようです.- –

+0

'window'に書き込むことで*できます:' export const GlobalObject = {foo: function(){console.log( "bar"); }}; window.GlobalObject = GlobalObject; 'しかし、少なくとも1つの他のモジュールがそれをトリガするためにそれをインポートする必要があります。もちろん、グローバルはモジュール対応環境では悪い考えです。 (人生は厄介です。) –

+0

私はこのアプローチを試しました.. (function(){ window.GlobalObject = GlobalObject; alert( "TRIGGER"); })(); 次にバンドルされている別のjsファイルに: 'Import GlobalObject from" GlobalObject "は、Webpack ProvidePluginとAliasで定義されたGlobalObjectを持っています。それでも、GlobalObjectは定義されていません。もし私がちょうどそれを古い方法でまとめれば、それは見つかった... Webpackバンドル内のすべてのファイルによって、もしそれをエクスポートに変更すると、ファイルが見つからないようだ。 –