【问题标题】:How should I load a file that is inside my own module?我应该如何加载我自己的模块内的文件?
【发布时间】:2018-01-31 08:37:56
【问题描述】:

/config/index.js 中的当前代码

const options = (require('js-yaml')).safeLoad(
  (require('fs')).readFileSync(`./config/default-config.yaml`, "utf8"));

module.exports = options;

工作正常。直到我在我的其他项目中发布并使用它。然后它(自然)无法找到该文件,因为该项目中不存在./config/default-config.yaml

我能想到的唯一选择是检查文件是否存在于该路径,然后尝试从node_modules/@company/alpha-gamma/config/default-config.yaml 加载它。这看起来真的很hacky。

配置对象很大,有 200 多个键。我认为它不属于代码。

加载模块中存在的文件的最佳解决方案是什么?我需要能够在发布之前加载它以进行单元测试,并在另一个模块需要该库时在运行时加载它。

也许最好的选择是使用json,因为我可以使用require 模块来加载它,而不是fs

【问题讨论】:

  • 我本来打算向您指出这一点 - 看起来很相似。 stackoverflow.com/questions/13051961/…
  • 我完全不同意这一点。我很惊讶我没有立即找到有关此主题的更多信息。
  • 看起来是这样做的。 __dirname 似乎不是节点式的;看起来像是 Ruby/Python 主义。这不协调。
  • 写下来,你应该得到答案。
  • 三年后更新了我的答案。我误导了你,我相信正确的答案是避免使用__dirname 而使用process.cwd()。您对使用它的保留是正确的。

标签: node.js require


【解决方案1】:

虽然我最初建议使用 __dirname 作为有效选项,但我错了。调用process.cwd() 来获取应用程序根并构建路径是最好的方法。

如此处所述: Proper way to reference files relative to application root in Node.JS

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 2022-01-06
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    相关资源
    最近更新 更多