provisioning-outreach/presentations/rust-laspalmas-250926/info/framework_JS_tool_plan.md

76 lines
2.6 KiB
Markdown
Raw Normal View History

Plan: Add External JS Minification Tool Support
1. Configuration Structure
Add a new [tools] section to the page config to specify external minification tools:
[tools]
# External minification tools (optional)
js_minifier = "terser" # terser, uglifyjs, esbuild, swc, or path to custom tool
js_minifier_path = "/usr/local/bin/terser" # Optional: explicit path
js_minifier_args = ["--compress", "--mangle"] # Optional: custom arguments
css_minifier = "" # Future: similar for CSS
html_minifier = "" # Future: similar for HTML
2. Framework Changes
A. Update framework/templates/page.config.toml.template
- Add the [tools] section with sensible defaults
- Document available minifiers and their options
B. Update framework/core/framework-utils.nu
- Add tool configuration extraction from page config
- Handle optional tool paths and arguments
C. Enhance framework/optimizers/optimize-js.nu
- Add minify_js_with_tool function that:
- Checks if external tool is configured
- Validates tool availability
- Falls back to built-in minification if tool not found
- Handles tool execution with proper error handling
D. Update framework/core/build.nu
- Modify the JS build process to check for external tools
- Use external tool for production/staging builds
- Keep built-in minification for development or as fallback
3. Tool Detection & Fallback Strategy
# Pseudo-code for tool selection
if $config.tools.js_minifier and not $dev {
if (check_tool_available $config.tools.js_minifier) {
use external_minifier
} else {
print warning "Tool not found, using built-in minifier"
use built_in_minifier
}
} else {
use built_in_minifier
}
4. Supported Tools
Initially support these popular JS minifiers:
- terser - Modern JS minifier (npm install -g terser)
- uglifyjs - Classic JS minifier (npm install -g uglify-js)
- esbuild - Fast bundler/minifier (npm install -g esbuild)
- swc - Rust-based fast minifier (npm install -g @swc/cli @swc/core)
5. Example Usage
Pages that need advanced JS minification can configure:
[tools]
js_minifier = "terser"
js_minifier_args = ["--compress", "drop_console=true", "--mangle", "--toplevel"]
6. Benefits
- Professional-grade minification for production
- Configurable per page or globally
- Graceful fallback to built-in minifier
- Support for different tools based on project needs
- Future extensibility for CSS and HTML tools