8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Elm v0.17 と Electron

Last updated at Posted at 2016-06-06

TL;DR

ElectronのRendererProcessでElm(v0.17)でコンパイルされたJSを動かすには

Elmのサンプルで

var app = Elm.Main.fullscreen();

となっている部分を

var app = module.exports.Main.fullscreen();

とすれば動く

何が起こっているか

Elmが生成するJSの変化

Elmは0.17でかなりドラスティックなアーキテクチャの変更を行った事は知られているが、実はコンパイルされるJSも結構変化している。
具体的にはv0.16では問答無用にグローバルなElmというオブジェクトを作っていたが、v0.17以降はmoduleのtypeを調べ、objectとして存在する場合はmodule.exportsElmを渡す以下のようなコードが生成される。

if (typeof module === "object")
{
  module['exports'] = Elm;
  return;
}

これは一部界隈で時々話題に挙がるサーバーサイドでのElmの活用を睨んだ変化だと考えられる(要出典)

ElectronのnodeIntegration

一方でElectronのRendererProcessを生成する、
BrowserWindowというAPIには、nodeIntegrationというオプションが存在し、
Electronの各種APIを活用するにはほぼ必須のオプションとなっている。

このオプションは様々なフレームワークと一緒に使う場合に
同様の競合を引き起こすらしく、FAQにもその事に関する記述がある。

本当に単純なWebアプリをデスクトップ化したいだけなら思い切って
nodeIntegrationをOff(false)にしてしまうのも手かもしれない。
その場合は従来通りグローバルなElmオブジェクトが生成され、サンプル通りのコードで動く。

その他

elm+electronに関してはこれまで記事に書いてきたりしましたが、
v0.17になり陳腐化しています。

elmtrnも現状ではv0.16対応です。(そのうち直す気はあります。)

追記

elmtrn v0.17 対応完了しました。

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?