grunt-text-replaceを使ってバージョンを表記するようにした

@nqounetです。

せっかくバージョン管理をしているので、バージョンを表記するようにしました。

最初はJavaScriptで考えた

最初は何も考えずに、package.jsonの値を使えばいいや、と思っていたのですが、deployには含めていない、ということを思い出しました。

かと言って、それをコピーするのもなんとなく微妙かなと。

特にセキュリティ的にも問題はありませんが、無関係なものが多すぎるかなと思います。

なので、テキストを置き換えるようにしようと思いました。

replaceは沢山ある

gruntのpluginを探すと、上位に3つのreplace物がありました。

普通に検索するとgrunt-text-replaceが出てきて、かつ、最近のDL数も多いので定番だろうという理由でgrunt-text-replaceを選びました。

設定の内容はこんな感じです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
replace: {
    siteInformation: {
        src: ['<%= config.dist %>/*.html'],
        dest: '<%= config.dist %>/',
        replacements: [{
            from: '\{\{pkg.version\}\}',
            to: 'v<%= pkg.version %>'
        }]
    }
},

gruntのオフィシャルプラグイン(contrib)と比べると設定の項目も洗練されてはいないのですが、ほどほどにわかりやすいです。

ファイルの移動が伴う場合は、cwdも欲しいところですね。

どのタイミングで置き換えるのか

grunt buildを行うと、連結や最小化、キャッシュを回避するための名前変更など、開発している状態とは違う状態になってしまうこともあるので、buildと同時に置き換える場合はタイミングを見計らう必要があります。

また、開発状態のファイルを書き換えると、次に書き換えるのが難しくなるので、あくまで開発のファイルを直接操作するのは避けたほうが良いと思います。

copy:distの直後あたりが妥当なところだと思います。

バージョンの情報は、package.jsonのバージョン情報から取得するようにしましたが、残念ながら、releaseと同時にbuildした時は、バージョン情報の更新前の情報になってしまいました。

リフレッシュする方法があれば良いのですが、よくわからないのでタスクは分けることにしました。

releaseしてからbuild+rsyncする感じでうまくいきました。

何を何に置き換えるのか

置き換える方法としては、テンプレートのようにわかりやすいのが良いと思います。

なので、HTML側はMustache方式{{}}でくくる)にしました。

スクリプト側は、package.jsonからバージョン情報を取得(configで設定)して、それを使います。

先程も書きましたが、変数として機能はしないので、releaseと同時にbuildした場合は古いバージョン番号が反映されますので、手順を分けるのが妥当なところでしょう。

そんな感じで、気がついたらv0.0.4になりました。

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。