是否有可能在Node中读取文件导出其内容(不导出asyncronly)?

时间:2017-03-31 21:28:20

标签: node.js

TLDR:我想读取文件的内容,然后导出依赖于这些内容的函数...而不使导出的函数使用promises或其他形式的异步性

我正在尝试编写一个XML验证模块,为了让它能够完成它我需要在XSD文件中读取的东西。但是,这只需要在#34;加载时间"发生一次,所以理想情况下我不想让其他使用我的函数的模块必须等待承诺解析才能获得结果。如果我使用Webpack这很容易,因为我可以使用它的文本文件加载器来引入XSD,就好像它是任何其他模块一样......但不幸的是我不是。

换句话说,目前我必须做(边界伪代码):

module.exports.validate = () => 
   new Promise((resolve) =>
       fs.readFile(path, (file) => {
           // use file to validate, then:
           resolve(validationResult);
       }); 
   });

};

而我想做:

fs.readFile(path, (file) => {
   module.exports.validate = myValidationFunction;
}); 

但上述方法并不奏效,因为您无法从回调中导出,所以我的问题是,还有其他方法可以实现这一目标吗?

https://github.com/jonschlinkert/to-exports图书馆似乎提供了这一点,所以它似乎有可能......但它对我不起作用:(

P.S。在最坏的情况下,我可以将文件的内容直接包装在模板字符串字符中,将文件重命名为.js,然后以这种方式导出:

module.exports = `*XSD contents go here*`;

然而,这似乎非常愚蠢,所以我希望有更好的方法。

1 个答案:

答案 0 :(得分:1)

如果要同步读取文件,请使用fs.readFileSync。它返回文件的内容或引发错误。