我可以在不使用 process.chdir() 的情况下更改 require()'d 模块的 cwd 吗?



我有一个 NodeJS 模块,它在特定目录中的文件系统上做了很多工作。我希望模块内的所有文件系统操作都相对于该目录完成 - (我们称之为/home/me/data)。

我意识到我可以用process.chdir("/home/me/data");更改当前的工作目录,但这会弄乱使用我的模块的任何其他模块的工作目录。

有没有办法让子模块具有与其父模块不同的工作目录?
我不想将变量传递给每个子模块以附加到fs.readFile(filepath);调用的文件路径。

有什么优雅的方法可以实现这一点吗?

附言子进程生成/分叉在这里不合适。

No.在 unix 中,cwd 是每个进程一个。通常,显式引用cwd的代码通常会被误导。它只对某些实用程序有意义,例如git,即便如此,操作系统也会相对于您的绝对转换进行处理。您是否考虑过使用path.resolve扩展路径,以便在将它们传递给相关模块之前它们是绝对的?

NPM 上的"相对 fs"模块是一种解决方案 https://www.npmjs.com/package/relative-fs - 它包装 fs 库以使其方法相对于给定目录。

免责声明:我还没有真正使用它。

最新更新