Javascript 组合JS文件(JSONish)
我希望动态组合多个javascript文件,每个文件都表示为一个对象,并具有以下几个函数:Javascript 组合JS文件(JSONish),javascript,json,node.js,Javascript,Json,Node.js,我希望动态组合多个javascript文件,每个文件都表示为一个对象,并具有以下几个函数: // ./src/foo.js { "foo": function() { console.log("foo"); } } // ./src/bar.js { "bar": function() { console.log("bar"); } } // desired output { "foo": function() { co
// ./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”文件
所以我的问题归结为两部分:
var json=json.parse(fs.readFileSync(srcFile,'utf8')
将包含函数的javascript对象读入var json
变量Object.assign({},json)
来合并函数对象这里是解决方案的第一部分:
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] }
现在需要决定如何表示函数
第二部分你可以找到
注意:eval是不安全的,但我认为在您任务的上下文中,它完全可以从技术上讲,您不能将函数放在json中。但是你可以把它的字符串表示放在里面