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

我试图让我的程序试图读取configuration文件,如果configuration文件不存在,程序将从config.example.js生成一个新的configuration文件,然后需要新生成的文件。 然而,我遇到了一个问题 – 即使使用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 } 

这是因为caching与require一起工作的方式。 因为第一个失败,第二个失败,直到事件循环清除。 试试这个方法。

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