首先让我说我是榆树的新手。我很感兴趣使用它来编写JavaScript库。我想要了解的是如何从最终用户的角度实例化新对象或类似对象。
在JavaScript中,我可能会使用:var my_lib = new MyLibrary();
在Elm,我需要做var my_lib = Elm.MyLibrary.worker();
我不想让最终用户以榆木的方式去做。我希望它的行为像vanilla JavaScript。
我应该使用Gulp工作流添加我,所以也许答案可以来自这个角度。我找不到任何东西。
答案 0 :(得分:1)
这取决于你的意思“表现得像香草JavaScript”。如果Promise
是vanilla javascript,您只需将Elm接口包装在您自己的函数中:
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);
这当然假设您已经调整了您的Elm脚本以便以这种方式使用。如果您想要公开多个功能,则需要在端口中处理这些功能。如果你只有一个功能并且更喜欢更脏的js以换取更干净的榆树,你可以做类似的事情:
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);
});
}
如果你的榆树应用程序的主要类似于main = text "some result"
。
要为最终用户打包,你可以把它放在一个文件中
cat elm.js > dist.js && cat interfaceCode.js >> dist.js
。我确定
Gulp有一种更为复杂的方式。