2016-09-27 55 views
0

Everything works when I require a normal JavaScript file in Node:如何使用Node.js和zlib來要求或評估gzipped JavaScript文件?

var test = require('test.js'); 
console.log(test.foo); // prints the function 

但現在我已經壓縮的test.js文件,讀取它作爲一個string作品:

var fs = require('fs'); 
var zlib = require('zlib'); 

var gunzip = zlib.createGunzip(); 

var buffer = []; 
fs.createReadStream('test.js.gz').pipe(gunzip); 
gunzip.on('data', function(data){ 
    buffer.push(data.toString()) 
}); 
gunzip.on('finish', function(){ 
    console.log(buffer.join("")); //prints the JS file as string  
}).on("error", function(e) { 
    console.log(e); 
}); 

但是,我不想string。使用eval似乎不正確。

我如何評價string作爲一個類似於我用require('test.js')獲得的JavaScript; (我不能使用外部庫)

回答

1

這裏是一個可能的實現:

const Module = require('module'); 
const zlib = require('zlib'); 
const fs  = require('fs'); 

function requireGZ(filename) { 
    let code = zlib.gunzipSync(fs.readFileSync(filename)).toString(); 
    let mod = new Module(); 

    mod._compile(code, filename); 

    return mod.exports; 
} 

// Use: 
let test = requireGZ('./test.js.gz'); 
+0

謝謝你,但我不能使用外部庫這一點。 – iwek

+0

@iwek我編輯了我的答案以提供不依賴於外部庫的可能實現。 – robertklep

+0

謝謝!我不得不放棄「嚴格使用」;作爲節點拋出語法錯誤:在嚴格模式之外還不支持塊範圍聲明(let,const,function,class) – iwek