【问题标题】:Is it possible in Node to read in a file an export its contents (without exporting asyncronly)?是否可以在 Node 中读取文件并导出其内容(不异步导出)?
【发布时间】:2017-04-01 06:14:50
【问题描述】:

TLDR:我想读入一个文件的内容,然后导出一个依赖于这些内容的函数……而不是让导出的函数使用 Promise 或其他形式的异步。

我正在尝试编写一个 XML 验证模块,为了让它完成它的工作,我需要读取一个 XSD 文件。但是,这只需要在“加载时间”发生一次,所以理想情况下,我宁愿不要让其他使用我的函数的模块必须等待一个承诺来解决以获得他们的结果。如果我使用 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 库似乎正好提供了这个,所以看起来有可能......但它对我不起作用:(

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

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

但是,这似乎很笨拙,所以我希望有更好的方法。

【问题讨论】:

    标签: node.js


    【解决方案1】:

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

    【讨论】:

    • 可悲的是,我什至知道这些功能存在,但我已经忘记了它们……有时,显而易见的答案就是盯着你的脸,你需要一点点才能看到它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多