我最近一直在为一个项目测试榆树,但遇到了一些问题 - 其中一个是使用外部JS库和Elm(例如Moment.js,i18n,firebase等)。我已经尝试过以下示例,但它并没有完全回答我想要的内容:
https://gist.github.com/evancz/e69723b23958e69b63d5b5502b0edf90
根据示例,我必须创建单独的程序,以便将模块移出并为每个程序生成静态.js文件。是否可以只在一个文件中写入所有端口,使用端口的最佳做法是什么?
答案 0 :(得分:3)
根据示例,我必须创建单独的程序,只是为了将模块移出并为每个程序生成静态.js文件。
我不相信这是真的。您链接到的拼写示例仅用于说明如何使用端口。您不必将使用端口的程序的每个部分编译到其自己的.js文件中。
您可以将所有端口放在一个模块中,但我会犹豫不决。在我看来,更好的方法是为每个要使用的外部JS库提供一个端口模块,并将用于与该模块中的该库通信的所有端口放在一起。这样,每个这样的模块的责任是明确的。然后,将整个Elm应用程序,端口模块和所有文件编译成一个.js文件。
使用端口的最佳做法是什么?
嗯,这有点开放。尽管如此,从我有限的经验来看:
将端口处理保留在单独的模块中,如果不需要,则不要将模块声明为port module
。
确保您彻底测试与第三方库的集成,尤其是错误情况。如果通过端口从外部库返回到Elm的数据类型不是您声明的那样,Elm将抛出异常。
如果您能找到与外部JS库相同的Elm包,请考虑使用它。