跳转到主要内容

JavaScript (ES5) 压缩器

项目描述

crimp

一个完全用Python编写的JavaScript压缩命令行工具;使用calmjs.parse作为底层库。

https://travis-ci.org/calmjs/crimp.svg?branch=1.0.1 https://ci.appveyor.com/api/projects/status/nmtjoh4mavbilgvo/branch/1.0.1?svg=true https://coveralls.io/repos/github/calmjs/crimp/badge.svg?branch=1.0.1

简介

crimpcalmjs.parse的前端。

这两个库都源于slimit,这是一个提供Python解决方案来处理JavaScript代码的包,通常用于在纯Python环境中不实用常用minifier(通常用Node.js编写)的情况。然而,slimit已经有一段时间没有维护了。截至2017年,由于许多影响生成代码正确性的问题仍然悬而未决,calmjs.parseslimit分叉出来,并且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实现具有非常高的函数调用性能开销。这种方法的优势是可以实现最大的灵活性(由于可以轻松设置反解析工作流程),而缺点是明显的。

贡献

变更日志

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 (17.9 kB 查看哈希值)

上传时间 源代码

构建分发版本

crimp-1.0.1-py2.py3-none-any.whl (11.1 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者