gpt4 book ai didi

javascript - 合并 JS 文件(JSONish)

转载 作者:行者123 更新时间:2023-11-30 11:43:21 24 4
gpt4 key购买 nike

我想动态组合多个 javascript 文件,每个文件都表示为一个具有一些功能的对象:

// ./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”文件?

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

  1. 什么替换了 var json = JSON.parse(fs.readFileSync(srcFile, 'utf8')); 以将包含函数的 javascript 对象读取到 var json 变量中?
  2. 用什么替换 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] }

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

第二部分你可以找到here

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

关于javascript - 合并 JS 文件(JSONish),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41864289/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com