33个版本
0.6.0 | 2023年12月25日 |
---|---|
0.5.6 | 2023年2月14日 |
0.4.3 | 2023年1月31日 |
0.4.0 | 2022年11月3日 |
0.1.5 | 2022年6月23日 |
#51 in 压缩
14,167 每月下载量
用于 44 个crate(13个直接使用)
105KB
2.5K SLoC
minify-js
极快JavaScript压缩器,使用Rust编写。
目标
- 完全使用Rust编写,以实现与Rust程序及其衍生品的最佳兼容性(FFI、WASM、嵌入式等)。
- 在单个CPU核心上最大化性能,以实现简单高效的扩展和易于兼容的集成。
- 仅对单个输入/文件进行最小化;不进行捆绑或转换。
- 在最小复杂度和更快的性能与最大可配置性和最小额外压缩之间进行权衡。
性能
与esbuild的对比,在常用库上运行。
特性
- 由SIMD指令和查找表驱动的快速解析。
- 数据由快速可重用的bump分配区域支持。
- 支持JSX。
- 分析作用域和变量可见性。
- 最小化标识符。
- 尽可能省略分号、空格、括号和大括号。
- 当不使用
new
、this
、arguments
和prototype
时,将函数转换为箭头函数。 - 将
if
语句转换为表达式。
使用方法
命令行界面
为Linux、macOS和Windows提供了预编译的二进制文件。
Linux x64 | macOS x64 | Windows x64
使用--help
参数获取更多信息。
minify-js --output /path/to/output.min.js /path/to/src.js
Rust
添加依赖
[dependencies]
minify-js = "0.6.0"
调用方法
use minify_js::{Session, TopLevelMode, minify};
let mut code: &[u8] = b"const main = () => { let my_first_variable = 1; };";
let session = Session::new();
let mut out = Vec::new();
minify(&session, TopLevelMode::Global, code, &mut out).unwrap();
assert_eq!(out.as_slice(), b"const main=()=>{let a=1}");
Node.js
安装依赖
npm i @minify-js/node
调用方法
import {minify} from "@minify-js/node";
const src = Buffer.from("let x = 1;", "utf-8");
const min = minify(src);
进行中
- 合并和重排声明。
- 常量表达式的评估和折叠。
- 解析并删除TypeScript语法。
- 删除不可达、未使用和冗余的代码。
- 内联单次使用的声明。
- 用条件表达式和逻辑表达式替换if语句。
- 对非法代码返回显式错误,例如具有相同名称的多个声明/导出。
- 大量内联、高级和用法文档。
- 支持导入和导出字符串名称,例如:
import { "a-b" as "c-d" } from "x"
。 - 简化模式解析和压缩。
- 微优化
- 展开字符串字面量计算成员,然后展开标识符或数字字符串成员。
- 将
x === null || x === undefined
替换为x == null
,其中x
无副作用。 - 将
typeof x === "undefined"
替换为x === undefined
。 - 使用简写属性。
- 将
void x
替换为x, undefined
。 - 将
return undefined
替换为return
。 - 将
const
替换为let
。 - 提升
let
和const
。 - 展开代码块。
- 展开括号,必要时更改表达式。
if (...) return a; else if (...) return b; else return c
=>return (...) ? a : (...) ? b : c
。
依赖项
~3.5MB
~51K SLoC