2017-01-16 1 views
0

は私が(undefined, function (exports)を持っているバベルのコンパイル後UMD ES2015モジュールBabelをこれを未定義に変更するにはどうしたらいいですか?

(function (global, factory) { 
    (typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.XmlDSigJs = global.XmlDSigJs || {}); 
})(this, function (exports) { 
// My code here 
... 

を持っています。

これを変更するためのbableオプションはありますか?

+0

どのようにBabelを使用していますか? –

答えて

1

コードがすでにUMDモジュールとして書かれているので、importまたはexportを使用していない場合は、あなたが設定され、プリセットに

"presets": [ 
    ['es2015', {modules: false}] 
], 

パスmodules: falseを行うことができますが、ファイルのANを考慮していないバベルを教えてくれます「ES6モジュール」は、あなたが見ている動作を引き起こしているものです。

1

これは「ES2015モジュール」と言いました。 ES2015モジュールの最上位スコープのthisは、undefinedです。あなたのコードがそれが別のものになることを期待している場合、そのコードは間違っています。

通常、グローバルオブジェクトを参照したり、グローバルでモジュールを作成したりすることはありません。それは地球の汚染を避けるためにモジュールを持っている理由の一部です。

あなたが必要とするまれなケースでは、行う方法は環境によって異なります。ブラウザーでは、windowを使用できます。これは、ブラウザーのJavaScriptグローバルオブジェクトであるウィンドウオブジェクトを参照するグローバル変数です。 NodeJSでは、globalを使用できます。これは、JavaScriptグローバルオブジェクトを参照するグローバル変数です。

しかし、モジュール内にグローバルを作成することは、パターンを修正することです。モジュールは提供するものをエクスポートし、グローバル化しないようにする必要があります。

+0

私のUMDの実装ではありません。以下は、私が使った[config](https://github.com/PeculiarVentures/xml-core/blob/master/rollup.config.js)ファイルの例です。それは私にとって正しい結果を持っています( 'this')。しかし、[xmldsigjs](https://github.com/PeculiarVentures/xmldsigjs)の 'npm run build:web'を実行すると' undefined'(ブラウザでは実行できません)となります。私は 'xmldsig'に同じ' rollup.config'を使わないので、[issue](https://github.com/rollup/rollup-plugin-babel/issues/125) – Microshine

関連する問題