2013-03-06 109 views
16

我有一个可执行节点/ 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_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 

有没有一种方法可以独立于所有这些变量保存文件?

回答

42

如果我正确地理解了这个问题,您想要始终写入相对于当前脚本的路径。要获得当前正在执行的脚本所在的目录的名称,你可以使用__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目录内的文件很好的做法。我建议你的模块需要文件系统中某个文件的完整路径。如果调用者希望在其自己的项目树中写入输出目录,则可以再次使用相同的__dirname技巧。