package Mojolicious::Plugin::AssetPack::Pipe::JavaScriptPacker; use Mojo::Base 'Mojolicious::Plugin::AssetPack::Pipe'; use Mojolicious::Plugin::AssetPack::Util qw(diag load_module DEBUG); use JavaScript::Packer; my $packer = JavaScript::Packer->init(); has config => sub { my $self = shift; my $config = $self->assetpack->config || $self->assetpack->config({}); $config->{JavaScriptPacker} ||= {}; }; has minify_opts => sub { { %{shift->config->{minify_opts} ||= {}}, } };# sub process { my ($self, $assets) = @_; my $store = $self->assetpack->store; return unless $self->assetpack->minify; my $file; return $assets->each( sub { my ($asset, $index) = @_; my $attrs = $asset->TO_JSON; $attrs->{key} = 'js-min'; $attrs->{minified} = 1; return if $asset->format ne 'js' || $asset->minified; return $asset->content($file)->minified(1) if $file = $store->load($attrs); return unless length(my $content = $asset->content); DEBUG && diag "Minify javascript=[%s] with checksum=[%s] and minify_opts=[@{[ %{$self->minify_opts} ]}]", $asset->url, $asset->checksum, ; $packer->minify(\$content, $self->minify_opts); $asset->content($store->save(\$content, $attrs))->minified(1); } ); } 1;