const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
fs.readdir(targetFolder , (err, files) => {
files.forEach(file => {
json.push({file.split('.')[0]})
});
})
jsonfile.writeFile(targetFolder , json);
当json.push在这里不起作用时,这很奇怪。当我做控制台喜欢
console.log(file.split('.')[0]) I can see the list of files in my terminal.
您收到意外的令牌错误,因为存在意外的令牌:
json.push({file.split('.')[0]})
// Here -------^
对象初始值设定项由键/值对组成。在 ES2015+ 中,如果我们从变量中获取值,我们可以只包含该变量,并且将从变量名称推断出键,但你不能使用任何任意表达式来做到这一点。
因此,例如,如果您希望对象的键foo
:
json.push({foo: file.split('.')[0]});
或者,如果您根本不想要对象,只需要值,请删除{}
:
json.push(file.split('.')[0]);
修复json.push
调用后,下一个问题是,在进行writeFile
调用之前不会对json.push
进行调用,因为readdir
异步调用其回调。更多:fs.readdir
和如何从异步调用返回响应?
更改此设置
json.push({file.split('.')[0]})
自
json.push({'fileName': file.split('.')[0]})
和
您正在使用异步代码作为同步代码。在你 你的文件是在执行 readdir 之前写入的。
正确的方法如下。
const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
fs.readdir(targetFolder , (err, files) => {
files.forEach(file => {
json.push({'fileName': file.split('.')[0]})
});
jsonfile.writeFile(targetFolder , json);
})
或者,如果您想同步,请执行以下操作
const targetFolder = './app/images/';
const fs = require('fs');
const jsonfile = require('jsonfile');
let json = [];
let files = fs.readdirSync(targetFolder);
files.forEach(file => {
json.push({'fileName': file.split('.')[0]})
});
jsonfile.writeFile(targetFolder ,json);