In previous two episodes I ported two apps to Imba 2, but you can't see them unless you check them out locally.
Fortunately for static apps it's very easy to use GitHub pages, and I used it before for a lot of other projects, so let's get started.
Install GitHub Pages
I'll do the same steps for imba2-rotn
(episode 20), and imba2-matrix-rain
(episode 21).
First we need to npm i --save-dev gh-pages
.
Then we can add two commands to package.json
, one for predeploy
and one for deploy
:
{
"name": "imba2-rotn",
"scripts": {
"start": "imba -w server.imba",
"build": "imba build server.imba",
"predeploy": "npm run build",
"deploy": "gh-pages -d dist/public"
},
"dependencies": {
"express": "^4.17.1",
"imba": "^2.0.0-alpha.199"
},
"devDependencies": {
"gh-pages": "^3.2.3"
}
}
And run npm run deploy
, and it almost works...
Absolute paths
Unfortunately that won't work, as Imba 2 by default uses absolute rather than relative paths in generated HTML.
This:
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Imba 2 ROT-N</title>
<!-- reference to the client script styles -->
<style src='*'></style>
</head>
<body>
<!-- reference to the client script -->
<script type="module" src="./client.imba"></script>
</body>
</html>
Becomes this:
<html lang="en">
<head><!--$head$-->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Imba 2 ROT-N</title>
<!-- reference to the client script styles -->
<link rel='stylesheet' href='/__assets__/all-TX3M4ICJ.css'>
</head>
<body><!--$body$-->
<!-- reference to the client script -->
<script type="module" src='/__assets__/app/client-5O71BJHW.js'></script>
</body>
</html>
This can be solved by adding --baseurl .
to imba build
, but app still won't work, as nothing in __assets__
even gets deployed.
Turn off Jekyll
It turns out by default GitHub Pages processess things with Jekyll, even if we don't actually need it. And Jekyll does not include __assets__
directory by default.
I also added -H
to disable hash-based names, as that was really getting in a way of debugging this issue, and these shouldn't be necessary on modern browsers anyway.
So many changes latre, here's the final package.json
:
{
"name": "imba2-rotn",
"scripts": {
"start": "imba -w server.imba",
"build": "imba build -H --baseurl . server.imba",
"predeploy": "npm run build && touch dist/public/.nojekyll",
"deploy": "gh-pages -d dist/public --dotfiles"
},
"dependencies": {
"express": "^4.17.1",
"imba": "^2.0.0-alpha.199"
},
"devDependencies": {
"gh-pages": "^3.2.3"
}
}
Deployed Apps
You can see ROT-N app here and Matrix Rain App here.
Coming next
In the next few episodes I'll try to port a few more Imba 1 apps to Imba 2, and then I guess I'll summarize my thoughts about Imba situation.
Top comments (0)