天天看点

批量压缩 js 文件

【环境准备】

<code>//uglify-js 只支持 ES5</code>

<code>npm install uglify-js -g</code>

<code>//uglify-es 支持 ES6+</code>

<code>npm install uglify-es -g</code>

<code>//uglify-js/uglify-es 在 CLI 调用时都是 uglifyjs</code>

<code>//在 API 调用时有所不同</code>

<code>var</code> <code>UglifyJS = require(</code><code>"uglify-js"</code><code>);</code>

<code>var</code> <code>UglifyJS = require(</code><code>"uglify-es"</code><code>);</code>

【Python 代码】

<code>#encoding: utf-8</code>

<code>#author: walker</code>

<code>#date: 2017-11-01</code>

<code>#summary: Python 调用 uglify-js/uglify-es 批量压缩 js 文件</code>

<code>import</code> <code>os</code>

<code># 处理一个</code>

<code>def</code> <code>ProcOne(parent, filename):</code>

<code>    </code><code>if</code> <code>not</code> <code>filename.lower().endswith(</code><code>'.js'</code><code>):  </code><code>#忽略非js文件</code>

<code>        </code><code>return</code>

<code>    </code><code>if</code> <code>filename.lower().endswith(</code><code>'.min.js'</code><code>):   </code><code>#忽略已压缩的js文件</code>

<code>    </code><code>srcFile </code><code>=</code> <code>os.path.join(parent, filename)</code>

<code>    </code><code>dstFile </code><code>=</code> <code>srcFile[:</code><code>-</code><code>3</code><code>] </code><code>+</code> <code>'.min.js'</code>

<code>    </code><code>cmd </code><code>=</code> <code>'uglifyjs "%s" -o "%s"'</code> <code>%</code> <code>(srcFile, dstFile)</code>

<code>    </code><code>print</code><code>(</code><code>'%s ...'</code> <code>%</code> <code>cmd)</code>

<code>    </code><code>os.system(cmd)</code>

<code># 处理所有</code>

<code># recursive 为 True,遍历 root 目录</code>

<code># recursive 为 False,只处理 root 的一级目录</code>

<code>def</code> <code>ProcAll(root, recursive</code><code>=</code><code>True</code><code>):</code>

<code>    </code><code>if</code> <code>recursive:</code>

<code>        </code><code>for</code> <code>parent, dirnames, filenames </code><code>in</code> <code>os.walk(root):</code>

<code>            </code><code>for</code> <code>filename </code><code>in</code> <code>filenames:</code>

<code>                </code><code>ProcOne(parent, filename)             </code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>for</code> <code>filename </code><code>in</code> <code>os.listdir(root):</code>

<code>            </code><code>ProcOne(root, filename)</code>

<code>    </code> 

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>ProcAll(r</code><code>'D:\NodejsProject\test'</code><code>, recursive</code><code>=</code><code>False</code><code>)</code>

【测试版本说明】

<code>OS: Windows 10</code>

<code>Python: 3.6.3</code>

<code>NodeJS: 8.7.0</code>

<code>uglify-es: 3.1.6</code>

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1978134如需转载请自行联系原作者

RQSLT