我最近一直在为一个项目测试Elm,但是遇到了一些问题-其中之一是在Elm中使用外部JS库(例如Moment.js,i18n,firebase等).我已经尝试过下面的示例,但是它并不能完全回答我想要的:
https://gist.github.com/evancz/e69723b23958e69b63d5b5502b0edf90
根据示例,我必须创建单独的程序,以将模块移植出并为每个程序生成一个静态.js文件.是否可以将所有端口写在一个文件中?使用端口的最佳做法是什么?
解决方法:
According to the example, I have to create individual programs just to port the module out and generate a static .js files for each of them.
我不相信这是真的.链接到的拼写示例仅用作如何使用端口的示例.您不必将使用端口的程序的每个部分编译到其自己的单独的.js文件中.
您可以将所有端口放在一个模块中,但我会犹豫不决.我认为更好的方法是为每个要使用的外部JS库提供一个端口模块,并将用于与该库通信的所有端口都放入该模块中.这样,每个此类模块的职责就很清楚了.然后,将整个Elm应用程序,端口模块以及所有内容编译为一个.js文件.
what are the best practices for using port?
好吧,这有点开放.但是,从我的有限经验来看:
>将端口处理保留在单独的模块中,如果不需要,则不要将模块声明为端口模块.
>确保您彻底测试了与第三方库的集成,尤其是在错误情况下.如果通过端口从外部库传回Elm的数据类型与您声明的不一致,则Elm将引发异常.
>如果您发现与外部JS库具有相同功能的Elm软件包,请考虑改用它.