JavaScript (ES5) 压缩器
项目描述
crimp
一个完全用Python编写的JavaScript压缩命令行工具;使用calmjs.parse作为底层库。
简介
crimp是calmjs.parse的前端。
这两个库都源于slimit,这是一个提供Python解决方案来处理JavaScript代码的包,通常用于在纯Python环境中不实用常用minifier(通常用Node.js编写)的情况。然而,slimit已经有一段时间没有维护了。截至2017年,由于许多影响生成代码正确性的问题仍然悬而未决,calmjs.parse从slimit分叉出来,并且crimp被创建为前端的。
安装
以下命令可以执行,从PyPI获取最新稳定版本的crimp wheel并将其安装到当前的Python环境中。
$ pip install crimp
用法
由于crimp是一个提供同名命令的包,因此安装后使用--help标志执行命令将揭示可用的选项。
$ crimp --help
usage: crimp [input_file [input_file ...]] [-h] [-O <output_path>] [-m] [-p]
[-s [<sourcemap_path>]] [--version] [-o] [--drop-semi]
[--indent-width n] [--encoding <codec>]
positional arguments:
input_file path(s) to input file(s)
optional arguments:
-h, --help show this help message and exit
-O <output_path>, --output-path <output_path>
output file path
-m, --mangle enable all basic mangling options
-p, --pretty-print use pretty printer (omit for minify printer)
-s [<sourcemap_path>], --source-map [<sourcemap_path>]
enable source map; filename defaults to
<output_path>.map, if identical to <output_path> it
will be written inline as a data url
--version show version information
--indent-width n indentation width for pretty printer
--encoding <codec> the encoding for file-based I/O; stdio relies on
system locale
basic mangling options:
-o, --obfuscate obfuscate (mangle) names
--drop-semi drop unneeded semicolons (minify printer only)
通常情况下,程序会使用单个或多个输入文件(如果它们要合并成一个文件),并可选地使用 -m 标志来表示可以安全地启用所有混淆选项。
请注意,所有输入文件 必须 在标志之前列出,因为这种强制组合所有输入文件的方式可以使得文件列表更不模糊,因为还有标志用于指定目标输出文件,这些文件将被覆盖而不会提示。
标准美化/压缩打印
压缩某些文件
$ crimp project.js -O project.min.js
仅对变量名进行混淆的压缩某些文件
$ crimp project.js -m -O project.min.js
将美化后的文件输出到标准输出
$ crimp project.min.js -p
从标准输入读取输入并将其写入文件。注意,如果接收到SIGINT(通常是Ctrl-C或Ctrl-Break),则不会打开输出文件进行写入。
$ crimp -O demo.js
生成源映射
对于源映射生成,启用 -s 标志。
$ crimp project.js -O project.min.js -s
上述操作将源映射文件写入 project.min.js.map,并且对该文件的引用(即 sourceMappingURL)也将作为注释附加到输出文件中。要指定特定位置,请传递名称作为参数。
$ crimp project.js -O project.min.js -s project.min.map
内联源映射(其中 sourceMappingURL 是源映射JSON序列化的base64编码的数据URL)受支持;可以通过与输出文件相同的名称提供参数来生成这些映射,如下所示
$ crimp project.js -O project.min.js -s project.min.js
故障排除
解析中等大小的文件比uglifjs慢10倍
这是由于 calmjs.parse 的实现方式,它作为一组生成器函数,产生非常少量的输出,并且标准的Python实现具有非常高的函数调用性能开销。这种方法的优势是可以实现最大的灵活性(由于可以轻松设置反解析工作流程),而缺点是明显的。
贡献
法律
crimp 包版权所有 (c) 2017 奥克兰生物工程研究所,奥克兰大学。 crimp 包根据MIT许可证(特别是Expat许可证)授权。
变更日志
1.0.1 - 2018-08-11
将 calmjs.parse 的最低版本提升到 1.1.1,其中包含对以下问题的修复
JavaScript源中的行续行符不再会破坏源映射行计数。 [ calmjs.parse#16 ]
将不再解析某些错误地未终止的语句为有效的JavaScript。 [ calmjs.parse#18 ]
混淆的压缩器将不再截断某些结束括号,因为内部计数已纠正。 [ calmjs.parse#19 ]
1.0.0 - 2017-09-26
首次发布。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发版本
crimp-1.0.1.zip 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7cc287d19c5ad914b59ab8959915f473235d35b3f6c036ceddbef052f4ea7caf |
|
MD5 | c70c9d83ea95265b263d5abfc044c162 |
|
BLAKE2b-256 | ef1b7070821d5ef0c14ccc63c0261f5477587506f3c5b3ce6fa4d395ad3d3703 |
crimp-1.0.1-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a38b6e1702287fbc5eca8923e486f4198e5b217d28405022792582ea6d431bab |
|
MD5 | 7a866a95142c9f7d8fc53aa741f957b9 |
|
BLAKE2b-256 | fcfcaea5cb48108aef471a6ce32665e6ea9f3d5339632c458147aac44aae3751 |