天天看點

批量壓縮 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