seirengames

制作したゲームの紹介や開発のお話など

haxelib updateで特定のライブラリを除いて一括更新する

haxelibでインストール済みライブラリを全て最新にしたい場合はhaxelib update --alwaysでワンコマンドでいけます。
しかしライブラリごとに更新する/しないを選択したい場合があります。 自分はhaxeflixelが最新のopenflやlimeに対応していない時にそういう状況になりました。
基本的にはhaxelib updateして更新があるライブラリの「updateしますか?」という問いにyかnを入力することになります。
しかし毎回入力してるとこれが面倒で、対話なしで最新verを使えないライブラリを除いて更新処理してほしくなってきます。もちろんライブラリの更新は変更内容を精査して慎重にやるべきケースもありますが今回は考えないこととします。

いくつか試してみました。
以下はhaxeflixelで使うopenflやlimeのバージョンを固定しつつその他のライブラリを一括で最新にするケースを想定しています。

  1. 固定したいバージョンのライブラリの該当フォルダを開発用に設定する。

    haxelib dev openfl C:\HaxeToolkit\haxe\lib\openfl\3,6,1
    haxelib dev lime C:\HaxeToolkit\haxe\lib\lime\2,9,1
    haxelib update --always
    問題点
    ・Ver固定したいライブラリに更新があった場合、不要なのにDLしてしまう。

  2. ライブラリ使用時に-lib library_name:X.X.Xと記述しバージョンを指定する。
    openflのproject.xmlでは<haxelib name="library_name" version="X.X.X" />
    問題点
    ・openflやlimeのVer指定方法がわからず。
    haxelib update --always するとVer固定したいライブラリに更新があった場合、不要なのにDLしてしまう。

  3. haxelibのローカルリポジトリを作りバージョンを固定したいライブラリはそちらにインストールする。

    haxelib newrepo
    haxelib install hoge 1.0.0
    クラスパスの記述で-cp C:/localrepo/.haxelib/hoge/1,0,0と指定
    openflのproject.xmlでは<classpath name="C:/localrepo/.haxelib/hoge/1,0,0" />
    問題点
    ・openflやlimeのVer指定方法がわからず。
    ・ローカルに無いライブラリはグローバルのものが使われる、という仕様になっておらずちょっと使いにくい印象。

なかなか上手い方法をみつけられません。
そこでupdateで除外指定できるちょっとしたツールを作りました。
haxelib updateで特定のライブラリを除いて一括更新する2 - seirengames
上記記事で公開してます。