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

Node.js 我应该如何加载我自己模块中的文件?,node.js,require,Node.js,Require,/config/index.js中的当前代码 const options = (require('js-yaml')).safeLoad( (require('fs')).readFileSync(`./config/default-config.yaml`, "utf8")); module.exports = options; 很好。直到我发布并在我的其他项目中使用它。然后它无法找到文件(自然),因为该项目中不存在/config/default config.yaml 我能想到的唯一

/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\u modules/@company/alpha gamma/config/default config.yaml
加载它。这似乎真的很令人讨厌

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

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


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

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

如本文所述:

我本想向您指出这一点,但这似乎很相似。我一点也不反对。我很惊讶我没有马上找到更多关于这个话题的信息。看起来是这样的。那
\uuu dirname
看起来很不起眼;看起来像是Ruby/Python ism。这是不一致的。写下来,你应该得到这个答案。三年后更新了我的答案。我误解了你,我认为正确的答案是避免使用
\uu dirname
而使用
process.cwd()
。你对使用它的保留是正确的。