pebble/devsite/plugins/generator_minify_js.rb

59 lines
1.8 KiB
Ruby
Raw Permalink Normal View History

# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'uglifier'
require 'digest'
module Jekyll
# Jekyll Generator for concatenating and minifying JS for production site
class GeneratorMinifyJS < Generator
priority :highest
def initialize(_)
end
def generate(site)
return if site.config['rack_env'] == 'development'
@site = site
@tmp_dir = File.join(site.source, '../tmp/')
@js_dir = 'assets/js/'
@tmp_js_dir = File.join(@tmp_dir, @js_dir)
libs_js = uglify_libs
libs_md5 = Digest::MD5.hexdigest(libs_js)
@site.data['js']['lib_hash'] = libs_md5
create_libs_js(libs_js, libs_md5)
end
private
def uglify_libs
ugly_libs = []
@site.data['js']['libs'].each do |lib|
lib_path = File.join(@site.source, 'assets', lib['path'])
ugly_libs << Uglifier.compile(File.read(lib_path))
end
ugly_libs.join("\n\n")
end
def create_libs_js(js, md5)
FileUtils.mkdir_p(@tmp_js_dir)
File.open(File.join(@tmp_js_dir, "libs-#{md5}.js"), 'w') do |f|
f.write(js)
end
@site.static_files << Jekyll::StaticFile.new(@site, @tmp_dir, @js_dir,
"libs-#{md5}.js")
end
end
end