我想动态组合多个javascript文件,每个文件都表示为具有一些函数的对象:
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对象的文件。如果我正在组合严格的JSON,那么函数看起来(非常粗略地)就像这样:
var json = JSON.parse(fs.readFileSync(srcFile, 'utf8'));
然而,这似乎不起作用,因为我的文件包含JSON表示中不严格允许的函数和注释。因此,我必须将文件存储为.js文件,这种方法不适用于将对象合并到单个对象中。我怎样才能读入并合并" JSON"包含函数的文件?
所以我的问题归结为两部分:
var json
将包含函数的javascript对象读入Object.assign({}, json)
变量?class Child extends React.Component {
render() {
return <button onClick={this.handleChildOnClick} className="t-btn">{this.props.children}</button>;
}
handleChildOnClick() {
this.props.onChildClick('foo');
}
}
来合并功能对象?答案 0 :(得分:3)
这里是解决方案的第一部分:
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] }
现在您需要决定如何表示函数
第二部分你可以找到here
注意:eval是不安全的,但我认为在你的任务中它完全没问题