使用Elm创建JavaScript库。我如何实例化?

时间:2017-02-02 18:07:39

标签: elm

首先让我说我是榆树的新手。我很感兴趣使用它来编写JavaScript库。我想要了解的是如何从最终用户的角度实例化新对象或类似对象。

在JavaScript中,我可能会使用:var my_lib = new MyLibrary();

在Elm,我需要做var my_lib = Elm.MyLibrary.worker();

我不想让最终用户以榆木的方式去做。我希望它的行为像vanilla JavaScript。

我应该使用Gulp工作流添加我,所以也许答案可以来自这个角度。我找不到任何东西。

1 个答案:

答案 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有一种更为复杂的方式。