UglifyJS3 压缩JS

Posted xiaozhuangblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UglifyJS3 压缩JS相关的知识,希望对你有一定的参考价值。

一. 软件安装

      步骤一:安装node.js, 下载地址:https://nodejs.org/en/,选择8.11.2 LTS 版本;

      步骤二:安装npm, 点击开始--node.js command prompt 输入npm install npm –g ;

      步骤三:安装UglifyJs, npm install uglify-js –g ;

     经过如上步骤,安装后的版本为UglifyJS3,其中安装目录中的node.exe是个解析器,终端敲命令node的时候,实际上系统就经过环境变量找到node的目录,然后找到了node.exe,然后使用node.exe进行解析。

二.压缩JS

    单个文件压缩方式

              步骤一:在桌面建一个文件夹js,然后找一个js文件放入其中;

              步骤二:点击开始--node.js command prompt 

                技术分享图片

                               经过如上操作后,会在js文件夹中sheng生成一个名为pickup.min_service.js的文件。

      批量压缩 

              步骤一:新建TXT文件,copy以下代码:

@echo off
:: 设置压缩JS文件的根目录,脚本会自动按树层次查找和压缩所有的JS
SET JSFOLDER=C:\\Users\\Administrator\\Desktop\\formini
echo 正在查找JS文件
chdir /d %JSFOLDER%
for /r . %%a in (*.js) do (
    @echo 正在压缩 %%~a ...
    uglifyjs %%~fa  -m -o %%~fa
)
echo 完成!
pause & exit

          步骤二: 将代码的后缀名改为.bat,运行该bat文件,即可执行批量压缩,压缩后的文件自动替换原来未压缩的文件。

     三.指令介绍

 

-h, --help                  列出使用指南。
                              `--help options` 获取可用选项的详情。
  -V, --version               打印版本号。
  -p, --parse <options>       指定解析器配置选项:
                              `acorn`  使用 Acorn 来解析。
                              `bare_returns`  允许在函数外return。
                                              在压缩CommonJS模块或`.user.js `引擎调用被同步执行函数包裹的用户脚本 时会用到。
                              `expression`  不是解析文件,二是解析一段表达式 (例如解析JSON).
                              `spidermonkey`  输入文件是 SpiderMonkey
                                              AST 格式 (JSON).
  -c, --compress [options]    启用压缩(true/false)/指定压缩配置:
                              `pure_funcs`  传一个函数名的列表,当这些函数返回值没被利用时,该函数会被安全移除。
  -m, --mangle [options]       启用混淆(true/false)/指定混淆配置:
                              `reserved`  不被混淆的名字列表。
  --mangle-props [options]    混淆属性/指定压缩配置:
                              `builtins`  混淆那些与标准JS全局变量重复的名字。
                              `debug`  添加debug前缀和后缀。
                              `domprops`  混淆那些鱼DOM属性名重复的名字。
                              `keep_quoted`  只混淆没括起来的属性名。
                              
                              `regex`  只混淆匹配(该正则)的名字。
                              `reserved`  不需要混淆的名字的列表(即保留)。
  -b, --beautify [options]    是否美化输出(true/false)/指定输出配置:
                              `beautify`  默认是启用.
                              `preamble`  预设的输出文件头部。你可以插入一段注释,比如版权信息。它不会被解析,但sourcemap会因此调整。
                              `quote_style`  括号类型:
                                              0 - auto自动
                                              1 - single单引号
                                              2 - double双引号
                                              3 - original跟随原码
                              `wrap_iife`  把立即执行函数括起来。注意:你或许应禁用压缩配置中的`negate_iife`选项。 

 -o, --output <file>         输出文件路径 (默认 STDOUT). 指定 `ast` 或
                                `spidermonkey`的话分别是输出UglifyJS或SpiderMonkey AST。
    --comments [filter]         保留版权注释。默认像Google Closure那样,保留包含"@license"或"@preserve"这样JSDoc风格的注释。你可以传以下的参数:
                                - "all" 保留全部注释
                                - 一个合适的正则,如 `/foo/` 或 `/^!/`,保留匹配到的注释。 
                                注意,在启用压缩时,因为死代码被移除或压缩声明为一行,并非*所有*的注释都会被保留。
    --config-file <file>        从此JSON文件读取 `minify()` 配置。
    -d, --define <expr>[=value] 定义全局变量。
    --ie8                       支持IE8。
                                等同于在`minify()`的`compress`、 `mangle` 和 `output`配置设置`ie8: true`。UglifyJS不会默认兼容IE8。
    --keep-fnames               不要混淆、干掉的函数的名字。当代码依赖Function.prototype.name时有用。
    --name-cache <file>         用来保存混淆map的文件。
    --self                      把UglifyJS本身也构建成一个依赖包
                                (等同于`--wrap UglifyJS`)
    --source-map [options]      启用 source map(true/false)/指定sourcemap配置:
                                `base` 根路径,用于计算输入文件的相对路径。
                                `content`  输入sourcemap。假如的你要编译的JS是另外的源码编译出来的。
                                假如该sourcemap包含在js内,请指定"inline"。 
                                `filename`  输出文件的名字或位置。
                                `includeSources`  如果你要在sourcemap中加上源文件的内容作sourcesContent属性,就传这个参数吧。
                                `root`  此路径中的源码编译后会产生sourcemap.
                                `url`   如果指定此值,会添加sourcemap相对路径在`//#sourceMappingURL`中。
    --timings                   在STDERR显示操作运行时间。
    --toplevel                  压缩/混淆在最高作用域中声明的变量名。
    --verbose                   打印诊断信息。
    --warn                      打印警告信息。
    --wrap <name>               把所有代码包裹在一个大函数中。让“exports”和“global”变量有效。
                                你需要传一个参数来指定此模块的名字,以便浏览器引用。        

  具体关于uglifyjs3的介绍可参考:https://jingyan.baidu.com/article/91f5db1b3e1f991c7f05e395.html

                                                              https://github.com/mishoo/UglifyJS2

                                                             https://www.npmjs.com/package/uglify-js

       关于SourceMap介绍可参考:

http://www.ruanyifeng.com/blog/2013/01/javascript_source_map.html
http://ju.outofmemory.cn/entry/34885
http://www.uedsc.com/jquery-min-map-404-not-found.html
https://blog.csdn.net/junli_chen/article/details/47355611?locationNum=6
https://qianduan.group/posts/59e5c3d0cf830d7057327c95
http://www.css88.com/doc/chrome-devtools/javascript/source-maps/

     关于sourceMappingURL,使用chrome浏览器进行调试时,可以根据压缩后js文件中末尾的sourceMappingURL,获取未压缩的js,这样进行调试时,就可以看懂js文件内容了。但是当把项目部署到服务器中时,由于jsp页面和js不在同一个文件夹中,浏览器进行访问时,是根据当前浏览器中的URL进行访问的,结果获取不到未压缩的js文件。

 


以上是关于UglifyJS3 压缩JS的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

js代码片段: utils/lcoalStorage/cookie

JS代码片段:一个日期离现在多久了

js常用代码片段(更新中)

js常用代码片段