我应该如何加载我自己的模块中的文件?

How should I load a file that is inside my own module?

/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

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

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