2017-01-22 14 views
4

webpackでtypescriptプラグインを作成しています。すべてうまくいくが、私は外から見えるようにすることに問題がある。たとえば、私はファイルを持っています:webpackでグローバル関数を作成する

/* ./src/a.ts */ 
class A { 
    constructor(args) {...} 
} 
export default A; 

/* ./src/app.ts */ 
import A from "./a.ts"; 
function init(args) { 
    new A(args); 
} 
export { init }; 

/* ./index.html */ 
<html> 
<head>...</head> 
<body> 
... 

<!-- webpack bundle ts files into ./dist/app.js --> 
<script src="./dist/app.js"></script> 
<script>init({...});</script> 

</body> 
</html> 

これで私はUncaught ReferenceError: init is not definedを得ました。

/* 1 */ 
/***/ function(module, exports) { ... } 

この機能は、公開する方法:バンドルされたファイルでは、私は、この関数はグローバルではありませんが、このような他の関数内であることがわかりますか?

答えて

7

モジュールからのエクスポートはエンティティをグローバルにしません。あなたは、直接窓にメンバーとして追加することができますより良いまだ

window.init = init; 

または、typescriptですモジュールに初期化の呼び出しに移動 - このケースでは、あなたのWebPACKのエントリポイントである必要があります。

+0

これはwebpackでバンドルする場合、モジュールの機能を自分自身の外側に見えるようにするための、本当に唯一の解決策ですか?私は大きなプロジェクトに取り組んでおり、それぞれに 'windows.functionname = functionname;'を追加することでこれを変更することはできません。私のようなケースのためのよりよい解決策がありますか? – FedericoCapaldo

+0

ウェブパックですべてのものを消費させることは可能ではありませんか?基本的に、この変数を消費しているものをバンドルします。 – lorefnon

+0

私は、この変数を定義するファイルとそれを使用するファイルをすべてバンドルします。しかし、関数定義はまだ関数の実装では見えません。それぞれのファイル(そして最後のバンドルではない)は関数ラッパーに囲まれているので(例えば、webpackバンドルは 'function(N、a){javascriptファイルのコード} function(N){他のjavascriptファイル}})。私は何かを欠いている? – FedericoCapaldo

関連する問題