Node.js 模块内的相对文件系统写入路径

Node.js 模块内的相对文件系统写入路径,node.js,path,relative-path,fs,Node.js,Path,Relative Path,Fs,我有一个可执行的节点/javascript脚本,它有一个调试布尔值,如果设置为true,将编写几个文件。此可执行文件也是节点模块。根据运行脚本的用户的工作目录,函数似乎找不到要将文件写入的目录 模块的结构如下所示 output/ lib/ helpers.js index.js 我最初的推理是让这条路走下去 helper.write = function(data,filename){ if(typeof data !== "string") data = JSON.strin

我有一个可执行的节点/javascript脚本,它有一个调试布尔值,如果设置为true,将编写几个文件。此可执行文件也是节点模块。根据运行脚本的用户的工作目录,函数似乎找不到要将文件写入的目录

模块的结构如下所示

output/
lib/
    helpers.js
index.js
我最初的推理是让这条路走下去

helper.write = function(data,filename){
    if(typeof data !== "string") data = JSON.stringify(data);
    fs.writeFileSync("./output/"+filename, data);
};
但是,当从node_模块文件夹中运行脚本时,这会起作用

fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data);
像这样

node ./my_app/node_modules/the_module/index.js
如果在使用该库的另一个可执行文件中使用这些模块,则会变得更加混乱

node ./my_app/run.js

是否有一种独立于所有这些变量保存文件的方法?

如果我正确理解了这个问题,您希望始终写入相对于当前脚本的路径。要获取当前正在执行的脚本所在的目录的名称,可以使用
\uuu dirname
如下所示:

var path = require('path');

helper.write = function(data,filename){
  if(typeof data !== "string") data = JSON.stringify(data);
  var file = path.join(__dirname, 'output', filename);
  fs.writeFileSync(file, data);
};
尽管如此,我认为在
node\u模块
目录中编写文件不是一种好的做法。我建议您的模块需要文件系统中其他地方的文件的完整路径。如果调用方希望写入其自己项目树中的输出目录,您可以再次使用相同的
\uu dirname
技巧