使用 node js 将代码从 fs 更改为 fs-extra
Posted
技术标签:
【中文标题】使用 node js 将代码从 fs 更改为 fs-extra【英文标题】:changing code from fs to fs-extra using node js 【发布时间】:2021-08-15 11:52:04 【问题描述】:我用var fs= require("fs").promises;
写了一个代码
var fs= require("fs").promises;
async function checkFileLoc(folderPath, depth)
depth -= 1;
let files = await fs.readdir(folderPath);
files = await Promise.all(
files.map(async (file) =>
const filePath = path.join(folderPath, file);
const stats = await fs.stat(filePath);
if (stats.isDirectory() && depth > 0)
return checkFileLoc(filePath, depth);
else if (stats.isFile()) return filePath;
else return null;
)
);
return files
.reduce((all, folderContents) => all.concat(folderContents), [])
.filter((e) => e != null);
然后我在我的项目中安装fs-extra
包并将var fs=require("fs");
替换为var fse=require("fs-extra");
并像这样对我的代码进行更改
var fse=require("fs-extra");
async function checkFileLoc(folderPath, depth)
depth -= 1;
let files = await fse.readdir(folderPath);
files = await Promise.all(
files.map(async (file) =>
const filePath = path.join(folderPath, file);
const stats = await fse.stat(filePath);
if (stats.isDirectory() && depth > 0)
return checkFileLoc(filePath, depth);
else if (stats.isFile()) return filePath;
else return null;
)
);
return files
.reduce((all, folderContents) => all.concat(folderContents), [])
.filter((e) => e != null);
当我使用fs
时,我得到了期望的输出,有人告诉我fs-extra
是提前然后fs
而你所要做的就是用fse
替换fs
我的代码无法正常工作我犯了错误的任何解决方案?
var fs= require("fs").promise;
时的输出是读取目录中存在的所有文件
FilePath=
[/home/work/test/abc.html
/home/work/test/index.js
/home/work/test/product.js
]
我在使用 var fse=require("fs-extra")
时的输出为空
filePath=[]
使用fs-extra
时我的输出没有出现
【问题讨论】:
“有人告诉我 fs-extra 是先进的” - 那么问那个人?我完全不明白你为什么要使用 fs-extra - 你有一个使用原生 fs 的正常工作代码,为什么要使用额外的库? 因为在项目中所有内容都写在fs-extra
这就是为什么需要更改@Bergi
好吧,但是代码“无法正常工作”到底是怎么回事?
究竟出了什么问题?错误信息?请提供示例输入和错误输出以及预期输出...等。
@derpirscher 显然(已删除 cmets)他们的团队负责人要求他们使用它,以便在整个项目中保持一致。
【参考方案1】:
我试图弄清楚如果我使用var fse= require("fs-extra");
,我必须做出哪些改变
所以我的代码看起来像这样
var fse=require("fs-extra");
async function checkFileLoc(folderPath, depth)
depth -= 1;
let files = fse.readdirSync(folderPath);
files = await Promise.all(
files.map(async (file) =>
const filePath = path.join(folderPath, file);
const stats = fse.statSync(filePath);
if (stats.isDirectory() && depth > 0)
return checkFileLoc(filePath, depth);
else if (stats.isFile()) return filePath;
else return null;
)
);
return files
.reduce((all, folderContents) => all.concat(folderContents), [])
.filter((e) => e != null);
我换了
var fs=require("fs");
到 var fse=require("fs-extra");
let files = await fs.readdir(folderPath);
和 let files = fs.readdirSync(folderPath);
const stats = await fs.stat(filePath);
与 const stats = fs.statSync(filePath);
现在我得到了我想要的输出
【讨论】:
您的代码现在处于阻塞状态 - statSync 不会屈服于事件循环,并且不会同时运行任何内容。 所以我需要改变任何东西@BenjaminGruenbaum 吗?如果需要任何更改,您可以帮助我 @BenjaminGruenbaum 抱歉,首先我曾经等待他们,但现在我不使用 await 检查我的 qstn 代码和 ans 代码它们是不同的 :)以上是关于使用 node js 将代码从 fs 更改为 fs-extra的主要内容,如果未能解决你的问题,请参考以下文章