在 HTML 中使用嵌入了 Elm 的 elm-reactor?
Using elm-reactor with Elm embedded in HTML?
所以我正在一起试用 Elm 和 WebRTC。但是对于 WebRTC,我需要一些与 javascript 的互操作。所以我为 WebRTC 和 main.js.
创建了一个包含所需脚本的 index.html
但是,我使用的是 elm-reactor。这是非常好的。但是没有main.js。我可以用 elm-make 创建它,但是我必须手动更新它。
那么,有没有办法让 elm-reactor 与嵌入式 elm 一起工作?
注意:我使用的是撰写本文时最新的 Elm 0.18。
从今天 (0.18.0
) 开始,您不能正式使用 elm-reactor 将您的应用程序嵌入到自定义 HTML 中。在没有额外设置的情况下,也不可能使用 elm-reactor 进行端口订阅。
考虑使用 Create Elm App or alternatives.
您可能想看看 elm-live。
它具有与 elm-reactor
相同的选项,但您可以使用自己的 index.html
。
如果你愿意破解一点,完全有可能 use your own index.html with elm reactor. Just put the following in an index.html file and open it in reactor (e.g. http://localhost:8000/src/index.html):
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="styles.css"><!-- Put your styles in folder with index.html -->
</head>
<body>
<div style="width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; color: #9A9A9A; font-family: 'Source Sans Pro';">
<div style="font-size: 3em;">Building your project!</div>
<img src="/_reactor/waiting.gif">
<div style="font-size: 1em">With new projects, I need a bunch of extra time to download packages.</div>
</div>
</body>
<!-- Fonts and external JS and styles are available, I've put Ace for example -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/ace.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/theme-chrome.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/worker-lua.js"></script>
<!-- Put the name of your app here (my sources place in `src` forder) -->
<script type="text/javascript" src="/_compile/src/YourApp.elm"></script>
<!-- Removes splash and starts elm app. -->
<script type="text/javascript">
while (document.body.firstChild) {
document.body.removeChild(document.body.firstChild);
}
runElmProgram();
</script>
</html>
如果您想使用端口或标志,请使用 the following example(您需要 Elm.App.fullscreen(flags)
等才能使用端口,但 runElmProgram()
会显示错误):
<!doctype html>
<meta charset=utf-8>
<title>a title</title>
<link href=/bundle.css rel=stylesheet>
<body></body>
<script src="/_compile/Main.elm"></script> <!-- this will fail in production -->
<script src="/elm-bundle.js"></script> <!-- this will fail in development -->
<script>
var app
var flags = {}
try {
app = Elm.App.fullscreen(flags)
/* app.ports is now available */
} catch (e) {
// this will run in case there are compile errors:
var stylesheets = document.querySelectorAll('link')
for (var i = 0; i < stylesheets.length; i++) {
stylesheets[i].parentNode.removeChild(stylesheets[i])
}
runElmProgram()
}
</script>
所以我正在一起试用 Elm 和 WebRTC。但是对于 WebRTC,我需要一些与 javascript 的互操作。所以我为 WebRTC 和 main.js.
创建了一个包含所需脚本的 index.html但是,我使用的是 elm-reactor。这是非常好的。但是没有main.js。我可以用 elm-make 创建它,但是我必须手动更新它。
那么,有没有办法让 elm-reactor 与嵌入式 elm 一起工作?
注意:我使用的是撰写本文时最新的 Elm 0.18。
从今天 (0.18.0
) 开始,您不能正式使用 elm-reactor 将您的应用程序嵌入到自定义 HTML 中。在没有额外设置的情况下,也不可能使用 elm-reactor 进行端口订阅。
考虑使用 Create Elm App or alternatives.
您可能想看看 elm-live。
它具有与 elm-reactor
相同的选项,但您可以使用自己的 index.html
。
如果你愿意破解一点,完全有可能 use your own index.html with elm reactor. Just put the following in an index.html file and open it in reactor (e.g. http://localhost:8000/src/index.html):
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="styles.css"><!-- Put your styles in folder with index.html -->
</head>
<body>
<div style="width: 100%; height: 100%; display: flex; flex-direction: column; justify-content: center; align-items: center; color: #9A9A9A; font-family: 'Source Sans Pro';">
<div style="font-size: 3em;">Building your project!</div>
<img src="/_reactor/waiting.gif">
<div style="font-size: 1em">With new projects, I need a bunch of extra time to download packages.</div>
</div>
</body>
<!-- Fonts and external JS and styles are available, I've put Ace for example -->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/ace.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/theme-chrome.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.4/worker-lua.js"></script>
<!-- Put the name of your app here (my sources place in `src` forder) -->
<script type="text/javascript" src="/_compile/src/YourApp.elm"></script>
<!-- Removes splash and starts elm app. -->
<script type="text/javascript">
while (document.body.firstChild) {
document.body.removeChild(document.body.firstChild);
}
runElmProgram();
</script>
</html>
如果您想使用端口或标志,请使用 the following example(您需要 Elm.App.fullscreen(flags)
等才能使用端口,但 runElmProgram()
会显示错误):
<!doctype html>
<meta charset=utf-8>
<title>a title</title>
<link href=/bundle.css rel=stylesheet>
<body></body>
<script src="/_compile/Main.elm"></script> <!-- this will fail in production -->
<script src="/elm-bundle.js"></script> <!-- this will fail in development -->
<script>
var app
var flags = {}
try {
app = Elm.App.fullscreen(flags)
/* app.ports is now available */
} catch (e) {
// this will run in case there are compile errors:
var stylesheets = document.querySelectorAll('link')
for (var i = 0; i < stylesheets.length; i++) {
stylesheets[i].parentNode.removeChild(stylesheets[i])
}
runElmProgram()
}
</script>