ElmDay 6

elm/http 2.0.0がインストールされない、またはelm.jsonの依存パッケージを更新、解決する方法


結論

elm-dependencies-analyzerという素晴らしいツールを作ってくれた方がいるのでこれを使って手作業で依存を解決して自分でelm.jsonを書き換えましょう


問題

elm/http 2.0.0が入らない問題が起こっているようです。elm installは現在の依存関係に加えて新しいpackageのバージョンを解決して入れるので元から古いのが入っていると新しいバージョンのものが入らないのです

ちょっと手元のelm.jsonを見てみましょう


elm.json

{

"type": "application",
"source-directories": ["src"],
"elm-version": "0.19.0",
"dependencies": {
"direct": {
"elm/browser": "1.0.0",
"elm/core": "1.0.0",
"elm/html": "1.0.0"
},
"indirect": {
"elm/json": "1.0.0",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.0"
}
},
"test-dependencies": {
"direct": {
"elm-explorations/test": "1.0.0"
},
"indirect": {
"elm/random": "1.0.0"
}
}
}

これは手元のcreate-elm-app@2.2.3で生成したelm.jsonです。現在は3.0.1のようですが生成されるものは一緒のようです

このelm.json結構問題で、ここからelm install elm/httpすると1.0.0が入ってしまいます

次はelm initで作ったelm.jsonを見てみましょう


elm.json

{

"type": "application",
"source-directories": [
"src"
],
"elm-version": "0.19.0",
"dependencies": {
"direct": {
"elm/browser": "1.0.1",
"elm/core": "1.0.2",
"elm/html": "1.0.0"
},
"indirect": {
"elm/json": "1.1.2",
"elm/time": "1.0.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.2"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}

バージョン上がってますね。

ここからhttpを入れるとちゃんと2.0.0が入ります

じゃあこのバージョンに手作業で合わせれば万事解決じゃん!


解決策1:手作業

なんだかいい感じに手作業でバージョンをあげたり下げたりします。elmはそんなに複雑な依存は多分発生しないので適当にバージョン新しくしてけばゴールできるはずです

たぶん


解決策2:elm installをまっさらからやり直し

依存分叩きまくってください

たぶんゴールできますよたぶんね


解決策3;依存解決できるツールを使う

elm-dependencies-analyzerを使ってみよう

使い方はreadmeに書いてあります。

左のテキストエリアにelm.jsonの中身をはっつけてanalyzeボタンを押します。少し待ったら右になんかバージョンが表示されるのでconflictが解消されるまで存分にバージョンをいじくりましょう!

……手作業だね!

まあ、でも、そんなに?大変じゃないですたぶん


終わり

ほんとはelmコマンド本体にこういう機能があればいいんですけどね

宣伝

elm-uiとかelm-markupの記事書いたりしてます

あと、アドベントカレンダーが3枚あって、まだ全然空きがあるのでよかったら参加してください