利用Node 搭配uglify-js壓縮js文件,批量下載圖片到本地

Node的便民技巧-- 壓縮代碼 下載圖片 

壓縮代碼

相信不少前端的同窗都會在上線前壓縮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

上面的下載須要網絡好一點,否則會失敗。

以上只是很是簡單的功能,但聚沙成塔,慢慢學習。 

相關文章
相關標籤/搜索