middleman 4の外部パイプラインを必要そうなときだけ動かす
ちょっとした確認のたびに外部パイプラインが動くと、いちいち時間がかかるので、必要っぽいときだけ動くようにしてみる。
ep_output_dir = '.tmp/dist'
ep_input_dirs = [
config[:css_dir] || 'stylesheets',
config[:js_dir] || 'javascripts'
]
ep_input_glob = '**/*.{js,css,scss,sass}'
if build?
ep_input_updated_at = ep_input_dirs.map do |dir|
patt = File.join(config[:source], dir, ep_input_glob)
Dir.glob(patt).map { |f| File.mtime(f) }.max
end.max
patt = File.join(ep_output_dir, '**/*')
ep_output_updated_at = Dir.glob(patt).map { |f| File.mtime(f) }.min
if ep_output_updated_at > ep_input_updated_at
ep_command = 'echo "(Skip external pipeline)"'
else
ep_command = 'node_modules/.bin/webpack --bail'
end
else
ep_command = 'node_modules/.bin/webpack --watch -d'
end
activate :external_pipeline,
name: :webpack,
command: ep_command,
source: ep_output_dir,
latency: 1