结合JS文件(JSONish)

我想要dynamic组合多个JavaScript文件,每个代表作为一个对象与几个function,如:

// ./src/foo.js { "foo": function() { console.log("foo"); } } // ./src/bar.js { "bar": function() { console.log("bar"); } } // desired output { "foo": function() { console.log("foo"); }, "bar": function() { console.log("bar"); } } 

我想返回一个类似于JSON对象的单个文件。 如果我结合严格的JSON,函数将看起来(非常粗略)如下:

  var files = ['./src/foo.json', './src/bar.json']; var final = {}; for(var i in files) { var srcFile = files[i]; var json = JSON.parse(fs.readFileSync(srcFile, 'utf8')); Object.assign(final, json); } console.log(JSON.stringify(final, null, 2)); 

这似乎不工作,但是,因为我的文件包含函数和注释,这是不是严格的JSON表示。 因此,我必须将这些文件存储为.js文件,并且这种方法不能将对象合并到一个对象中。 我如何阅读和合并包含函数的“JSON”文件?

所以我的问题归结为2个部分:

  1. 什么replacevar json = JSON.parse(fs.readFileSync(srcFile, 'utf8')); 读取包含函数的javascript对象到var jsonvariables中?
  2. 什么replaceObject.assign({}, json)来合并function对象?

这里解决scheme的第一部分:

 const fs = require('fs') const files = ['./foo.js', './bar.js']; const Promise = require('bluebird'); const final = Promise.resolve(files) .map(file => Promise.fromCallback(cb => fs.readFile(file, 'utf-8', cb))) .reduce( function(acc, file) { const obj = eval(`(${file})`) return Object.assign(acc, obj) }, {} ).then(function(final) { console.log(final) }) 

结果:

 > node 1.js { foo: [Function], bar: [Function] } 

现在您需要决定如何表示函数

第二部分你可以在这里find

注意:eval是不安全的,但我认为在你的任务中是完全没问题的