节点尝试在同步写入完成之前读取文件

Node attempting to read file before synchronous write finishes

本文关键字:读取 文件 同步 节点      更新时间:2024-01-04

我正在尝试使我的程序尝试读取配置文件,如果配置文件不存在,程序将从config.example.js生成一个新的配置文件,然后需要新生成的文件。然而,我遇到了一个问题——即使使用fs.writeFileSync(),Node似乎在"同步"写入完成之前就在运行config = require('config.js');,因为它与Cannot find module './config.js'崩溃了。

这是有问题的代码:

var config;
//Create new config file if one not found
try {
    config = require('./config.js');
} catch (e){
    fs.writeFileSync('./config.js', fs.readFileSync('./config.js.example'));
    console.log("New config file config.js created");
    config = require('./config.js');  //Line it crashes on
}

这是因为缓存处理require的方式。因为第一个失败了,所以第二个也会失败,直到事件循环清除为止。不如这样试试。

if (fs.existsSync('/config.js')) {
    config = require('./config');
} else {
    fs.writeFileSync('./config.js', fs.readFileSync('./config.js.example'));
    config = require('./config');
}