相信不少前端的同窗都會在上線前壓縮JS代碼,如今的Gulp Webpack Grunt......都能輕鬆實現。但問題來了,這些都不會,難道就要面對幾十個JS文件一遍遍來回「複製-壓縮-建立-粘貼」,這樣太不人性化了。 前端
因而能夠藉助Node + uglify-js 輕鬆實現。(前提你會點node操做)node
1.首先看一下目錄:git
|--uglifyJSgithub
|--jsnpm
|--test1.jsjson
|--test2.jsapi
|--uglify.js //這個就是本文的重點編輯數組
2.打開uglifyJS文件夾安全
npm install uglify-js
3.編輯uglify.js網絡
3.1 首先說一下思路和實現的東西
一、將須要壓縮的文件放在一個JS文件夾下
二、把名字存儲在一個數組下
三、爲這組數組添加JS文件夾相對路徑與.js後綴(其實這一步能夠在上面的數組裏一塊兒完成)
四、遍歷一下數組,將每個路徑進行 var result = UglifyJS.minify(**每個文件路徑** ,**壓縮選項**)
五、將獲得的result.code 利用fs的writeFileSync 寫進 fs.writeFileSync(**文件名**, result.code, 'utf-8' , function(err){})
3.2 其實真的很簡單,如下是所有代碼
/** * Created by QRL on 2016/8/21. */ var UglifyJS = require('uglify-js'); var fs = require('fs'); var JS = ['test1' , 'test2']; //只須要寫名字 自動將./js 加在每個前面 並添加.JS後綴 var AddJS = function(JS){ var newJS = []; JS.map(function (x) { x = './js/'+x+'.js'; newJS.push(x); }) return newJS; } var JSOptions = AddJS(JS); //壓縮的選項 var min_options = { mangle:true, //輸出變量名替換後的文件 compress :{ sequences : true, //使用逗號操做符加入連續的簡單語句 properties : true, //使用點好重寫屬性訪問,例如foo["bar"] → foo.bar dead_code : true, //移除不可達的代碼 drop_debugger: true, //移除調試器和調試語句 conditionals : true, //爲if -else 和條件表達式應用優化 evaluate : true, //嘗試去計算常量表達式 booleans : true, //多種針對布爾上下文的優化,例如 !!a ? b : c → a ? b : c loops : true, //當咱們能夠靜態的判斷條件的取值時,針對do,while和for循環的優化 unused : true, //去掉沒有被引用過的函數和變量 hoist_funs : true, // 提高函數聲明 hoist_vars : true, //(默認值: false) — 提高var聲明 (由於通常看起會增長輸出的大小,因此它默認是false的) if_return : true, //這對 if/return 和 if/continue 的優化 join_vars : true, //加入連續的var語句 cascade : true, //對於 sequences, transform x, x into xandx = something(), x into x = something() 的一些小優化 drop_console : true, //默認爲false. 傳入true會丟棄對console.函數的調用. comparisons : true, //針對二進制節點應用某些特定的優化,例如:!(a <= b) → a > b (只在不安全時), 嘗試去否定二進制節點,例如.a = !b && !c && !d && !e → a=!(b||c||d||e) 等等. unsafe : false //應用「不安全」的轉換 } } //寫文件封裝函數 function writefs(min ,code){ fs.writeFile(min , code , 'utf-8' , function(err){ if (err) throw err; console.log('success'); }) } var Uglify = function(options){ options = options || {}; options.type = (options.type || 'sign').toLowerCase(); options.outName = (options.outName || './js/out.min.js'); var data = options.data; if(options.type == 'sign'){ for(var i in data){ var result = UglifyJS.minify(data[i] ,min_options); /*除去 .js 後綴*/ var min = data[i].replace('.js' ,''); writefs(min+'.min.js' , result.code); } }else{ min_options.wrap = true; min_options.outSourceMap = 'out.js.map'; var result = UglifyJS.minify(data , min_options); writefs(options.outName , result.code); } } Uglify({ data :JSOptions, type : 'sign', //利用狀態 sign標誌爲單獨壓縮 其他爲合併壓縮 outName : './js/out.min.js'
});
簡單的測試下,JS文件夾下 出來min.js壓縮文件了。
看到Github https://api.github.com/emojis 上有 emoji 各類表情,想着一個個「打開鏈接-圖片另存爲」 ,要是一兩個還好,好傢伙,竟然有800多個,瘮得慌。
因而想着利用node的http + fs 實現讀取地址
實現思路
1.首先建立文件夾
2.經過json對象將地址一個個傳給https 進行處理
3.將獲得的數據data 存起來,利用writeFile寫進數據
4.打開文件夾 一切都在了
/** * Created by QRLon 2016/8/13 0013. */ var http = require('http'); var https = require('https'); var fs = require('fs'); //從新定義建立文件夾 function mkdirSync(url , mode , cb){ var path = require('path'), arr = url.split('/'); mode = mode || 0777; cb = cb || function(){}; if(arr[0]==='.'){ arr.shift(); } if(arr[0] == '..'){ arr.splice(0, 2, arr[0]+"/"+arr[1]) } function inner(cur){ if(!fs.existsSync(cur)){ //不存在就建立一個 fs.mkdirSync(cur , mode) } if(arr.length){ inner(cur + "/" + arr.shift()); }else{ cb(); } } arr.length && inner(arr.shift()); } //建立文件夾 mkdirSync('./data','',function(e){ if(e){ console.log('出錯了'); }else{ console.log("建立成功") } }) mkdirSync('./img','',function(e){ if(e){ console.log('出錯了'); }else{ console.log("建立成功") } }) var url = 'http://a33d82f76271fa5e5ac8.b0.upaiyun.com/apicloud/818900b273d2591478a6f3fd8a9ef0ac.txt'; http.get(url , function(res){ var data =''; res.setEncoding('utf-8'); //定義文件編碼 res.on('data' , function(chunk){ data += chunk; }); res.on('end',function(){ fs.writeFile('./data/data.json', data ,'utf-8' ,function(err) { if (err) throw err; console.log ('文件寫入成功'); }); var JSONData = JSON.parse(data) console.log(JSONData) for(var x in JSONData){ emjin(x ,JSONData[x]); } }) }) function emjin(x , url){ https.get(url , function(res){ var imgData = ''; res.setEncoding('binary'); //注意這裏須要設置爲二進制 否則後面打不開圖片 res.on('data' , function(chunk){ imgData += chunk; }); res.on('end' , function(){ fs.writeFile('./img/'+x+'.png' , imgData , 'binary' , function(err){ if (err) throw err; console.log('success'); }) }) }) }
原本用 https://api.github.com/emojis 這個就能夠 可是由於Http以前的問題(怪我沒學好Http服務)
因此把內容複製了剪切到 http://a33d82f76271fa5e5ac8.b0.upaiyun.com/apicloud/818900b273d2591478a6f3fd8a9ef0ac.txt
上面的下載須要網絡好一點,否則會失敗。
以上只是很是簡單的功能,但聚沙成塔,慢慢學習。