如何使用Node.js和zlib来要求或评估gzip压缩的JavaScript文件?

时间:2016-09-27 13:52:29

标签: node.js gzip require zlib

  

当我在Node中需要一个普通的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评估为类似于我所要求的JavaScript(' test.js'); (我不能使用外部库)

1 个答案:

答案 0 :(得分: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');