2017-04-02 44 views
3

我最近爲一個項目測試了Elm,但遇到了一些問題 - 其中一個是在Elm上使用外部JS庫(例如Moment.js,i18n,firebase等)。我試過下面的例子,但它並不完全回答我想:如何在Elm中使用外部JavaScript庫?

https://gist.github.com/evancz/e69723b23958e69b63d5b5502b0edf90

根據實例,我要創建單獨的程序只是端口的模塊併產生一個靜態的.js文件爲他們每個人。是否可以將所有端口寫入單個文件,以及使用端口的最佳做法是什麼?

回答

3

根據示例,我必須創建單個程序來移植模塊,併爲其中的每個程序生成一個靜態.js文件。

我不相信這是真的。您鏈接的拼寫示例僅用於說明如何使用端口的示例。您不必將使用端口的程序的每個部分編譯到其單獨的.js文件中。

你可以把所有的端口放在一個模塊中,但我會毫不猶豫地這樣做。在我看來,更好的方法是爲每個要使用的外部JS庫提供一個端口模塊,並將用於與該模塊中的庫進行通信的所有端口。那樣,每個這樣的模塊的責任是清楚的。然後,將整個Elm應用程序,端口模塊和全部文件編譯成一個.js文件。

什麼是使用端口的最佳實踐?

那麼,這是有點開放式。不過,從我比較有限的經驗:

  • 保持端口處理在單獨的模塊,並且不聲明模塊作爲port module如果沒有需要的人。

  • 確保您完全測試與第三方庫的集成,特別是對於錯誤情況。如果通過端口從外部庫返回Elm的數據類型不像您聲明的那樣,Elm將拋出異常。

  • 如果您可以找到與外部JS庫相同的Elm包,請考慮使用它。