「バニラのJavaScriptのように振る舞う」という言い方によって異なります。
function myModuleName (maybeSomeArgs) {
return new Promise((resolve, reject) => {
var app = Elm.MyLibrary.worker(maybeSomeArgs);
app.ports.out.subscribe(resolve);
app.ports.error.subscribe(reject);
});
}
とエンドユーザーはちょうどそれが好きで使用します:もちろん
myModuleName(42).then(doSomething);
これは、あなたに適応していると仮定しPromise
あなたは単にあなた自身の機能にエルム・インターフェースをラップすることができjavascriptのバニラされた場合このように使用されるElmスクリプト。公開したい機能が複数ある場合は、ポートでそれを処理する必要があります。あなたのエルムアプリのメインはmain = text "some result"
のようなものであれば
function myModuleName (maybeSomeArgs) {
return new Promise((resolve, reject) => {
var node = document.createElement("div");
var app = Elm.MyLibrary.embed(node, maybeSomeArgs);
setTimeout(() => {
resolve(node.innerText);
}, 0);
});
}
:あなただけの機能を持っており、クリーンエルムと引き換えに汚れjsのを好むならば、あなたのような何かを行うことができます。
これをエンドユーザー向けにパッケージ化するには、これはファイルで、 cat elm.js > dist.js && cat interfaceCode.js >> dist.js
とするだけです。私は確信している ガルプはそれをやってより複雑な方法があります。
Elmコード_from_ javascriptを呼び出す場合は、おそらく '.worker()'が最適です。これにより、コマンドとサブスクリプションを通じて 'update'機能を介してポートにアクセスできます。残念ながら、Elmは標準化された将来的な方法でjavascriptに関数を公開していません(javascriptを発行して以来、常に何かをハックすることができますが、後方互換性は保証されません) –
素早い返信。それは私が想定したものです。私は健全性チェックに感謝します。 ;-) –