From 17d1ae9f053c737328e6d8b626fdaace8b0777ff Mon Sep 17 00:00:00 2001 From: neveler <55753029+neveler@users.noreply.github.com> Date: Thu, 21 May 2026 09:38:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20post=5Fprocess=20=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=20(#445)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 2 ++ _config.yml | 32 ++++++++++++++++++++----- _layouts/document.html | 9 +++---- _layouts/settings.html | 10 ++++---- _plugins/post_process.rb | 51 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 _plugins/post_process.rb diff --git a/Gemfile b/Gemfile index eb9f5bb..e4e9405 100644 --- a/Gemfile +++ b/Gemfile @@ -33,3 +33,5 @@ gem "http_parser.rb", "0.8.0", :platforms => [:jruby] # plugin dependencies gem "webp-ffi", "0.4.0" if ENV["ENABLE_WEBP_AUTO_CONVERSION"] == "true" || ENV["DRONE"] == "true" +gem "mini_racer", "0.20.0" if ENV["ENABLE_EMBEDDED_V8"] == "true" || ENV["DRONE"] == "true" +gem "terser", "1.2.7" diff --git a/_config.yml b/_config.yml index 2f6d57e..e76e9a4 100644 --- a/_config.yml +++ b/_config.yml @@ -316,12 +316,6 @@ compress_html: ignore: envs: development -head_scripts: - - /assets/js/settings.js - - /assets/js/theme.js -after_footer_scripts: - - /assets/js/plugins/jquery.auto-redirect.js - # jekyll-feed feed: collections: @@ -330,3 +324,29 @@ feed: - modpack - eula - multiplayer + +post_process: + terser: + /assets/js/main.min.js: + - /assets/js/settings.js + - /assets/js/theme.js + - /assets/js/meta.js + - /assets/js/vendor/jquery/jquery-3.6.0.js + - /assets/js/plugins/gumshoe.js + - /assets/js/plugins/jquery.ba-throttle-debounce.js + - /assets/js/plugins/jquery.fitvids.js + - /assets/js/plugins/jquery.greedy-navigation.js + - /assets/js/plugins/jquery.magnific-popup.js + - /assets/js/plugins/smooth-scroll.js + - /assets/js/plugins/jquery.auto-redirect.js + - /assets/js/_main.js + remove_dirs: + - /assets/images/ + - /assets/js/plugins/ + - /assets/js/vendor/ + remove_files: + - /assets/js/meta.js + - /assets/js/_main.js + - /assets/js/theme.js + - /assets/js/settings.js + - /assets/js/main.min.js.map diff --git a/_layouts/document.html b/_layouts/document.html index e545dc4..5977bbd 100644 --- a/_layouts/document.html +++ b/_layouts/document.html @@ -5,10 +5,11 @@ layout: single {{ content }} {% if page.author or page.contributors or jekyll.environment == 'production' and page.hits %} - {% endif %} diff --git a/_layouts/settings.html b/_layouts/settings.html index 7182227..778174a 100644 --- a/_layouts/settings.html +++ b/_layouts/settings.html @@ -46,10 +46,12 @@ layout: single {% endfor %} diff --git a/_plugins/post_process.rb b/_plugins/post_process.rb new file mode 100644 index 0000000..396a83c --- /dev/null +++ b/_plugins/post_process.rb @@ -0,0 +1,51 @@ +require "terser" + +ExecJS.runtime = ExecJS::Runtimes::MiniRacer if ExecJS::Runtimes::MiniRacer.available? + +Jekyll::Hooks.register :site, :post_write do |site| + config = site.config["post_process"] + next unless config + + terser = config["terser"] + if terser.is_a?(Hash) + terser.each do |terser_output, terser_inputs| + next unless terser_output.is_a?(String) && terser_inputs.is_a?(Array) + + terser_codes = [] + terser_inputs_all_exist = true + terser_inputs.each do |file| + destination = File.join(site.dest, file) + if File.exist?(destination) + terser_codes << File.read(destination, encoding: "UTF-8") + else + terser_inputs_all_exist = false + break + end + end + + if terser_inputs_all_exist + destination = File.join(site.dest, terser_output.to_s) + File.write(destination, Terser.compile(terser_codes.join(";"))) + Jekyll.logger.info "Post Process:", "terser #{terser_output}" + end + end + end + + remove_files = config["remove_files"] + if remove_files.is_a?(Array) + remove_files.each do |file| + destination = File.join(site.dest, file) + File.delete(destination) if File.exist?(destination) + Jekyll.logger.info "Post Process:", "remove_files #{file}" + end + end + + remove_dirs = config["remove_dirs"] + if remove_dirs.is_a?(Array) + remove_dirs.each do |dir| + destination = File.join(site.dest, dir) + FileUtils.rm_rf(destination) if File.directory?(destination) + Jekyll.logger.info "Post Process:", "remove_dirs #{dir}" + end + end +end