[Middleman 3] middleman build にオプションをつける
例えば middleman build -e production
Version 4 からは正式に使えるようになるそうです。
@DriftwoodJP v4用のコードから -e オプション用意されています。https://t.co/qx2LUjQ91i
— yterajima (@yterajima) October 29, 2014
教えて頂いた箇所を見ると、現在のバージョンでも同じ箇所に手を入れれば、目的が果たせそうなので調べてみました。
Contents
目的
middleman build -e production
を実行すると、本番用に画像や CSS を minify する条件分岐を追加したい。
% middleman version
Middleman 3.3.6
ソースを修正する
Fork する
Middleman のソースを変更できるように fork します。
git clone
して、今回の作業用にトピックブランチを作っておきます。
% git clone git@github.com:DriftwoodJP/middleman.git
% cd middleman
% git checkout -b build_option
Switched to a new branch 'build_option'
該当箇所を修正する
教えて頂いたのはこのあたり。
https://github.com/middleman/middleman/blob/master/middleman-cli/lib/middleman-cli/build.rb#L12-15
どうも Thor を CLI として使っているよう。
現在の v3.3.6 では middleman-core/lib/middleman-core/cli/build.rb が同等の処理を担っているようなので、該当箇所に同じ内容を追記しました。
desc 'build [options]', 'Builds the static site for deployment'
method_option :environment,
aliases: '-e',
default: ENV['MM_ENV'] || ENV['RACK_ENV'] || 'development',
desc: 'The environment Middleman will run under'
Middleman を知っていればもっとうまい方法もあるかもしれませんが、これだけで ARGV
で値をとれそうです。
middleman build -e foo
もエラーなしで動くようになりました。
git push する
add, commit 実行後、Fork したリポジトリにトピックブランチを push しておきます。
% git push origin build_option
以上で下準備が完了です。
github からインストールする
Middleman のプロジェクトファイルに戻ります。
ソースを改変した branch を指定し、Fork した github のリポジトリからインストールするよう設定を変更します。
# gem 'middleman', '~> 3.3.6'
gem 'middleman', github: 'DriftwoodJP/middleman', branch: 'build_option'
bundle update
します。
% bundle update
config.rb を修正する
config.rb で、オプション値を ARGV
で受け取ります。
# Build-specific configuration
configure :build do
# middleman build -e production
if ARGV[2] == 'production'
activate :gzip
activate :minify_css
activate :minify_javascript
end
end
下記を実行すると、if 文の処理が行われるようになりました。
% bundle exec middleman build -e production