模块内的相对文件系统写path

我有一个可执行的节点/ JavaScript脚本有一个debugging布尔值,如果设置为true,将写入几个文件。 这个可执行文件也是节点模块。 根据运行脚本的用户的工作目录,似乎该function找不到写入文件的目录。

模块是这样构成的

output/ lib/ helpers.js index.js 

我原来的理由是要有path。

 helper.write = function(data,filename){ if(typeof data !== "string") data = JSON.stringify(data); fs.writeFileSync("./output/"+filename, data); }; 

但是,这在从node_module文件夹内运行脚本时起作用

 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 

有没有办法独立于所有这些variables保存文件?

如果我正确地理解了这个问题,你总是想写一个相对于当前脚本的path。 要获取当前正在执行的脚本所在目录的名称,可以使用__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_modules目录下写文件不是一个好习惯。 我build议你的模块需要文件系统中某个文件的完整path。 如果调用者希望在自己的项目树中写入输出目录,则可以再次使用相同的__dirname技巧。