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

Node attempting to read file before synchronous write finishes

我试图让我的程序尝试读取配置文件,如果配置文件不存在,程序将从 config.example.js 生成一个新的配置文件,然后要求新生成的文件。但是,我 运行 遇到了一个问题 - 即使使用 fs.writeFileSync(),Node 在 "synchronous" 写入完成之前似乎是 运行 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');
}