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

时间:2013-03-06 18:13:02

标签: 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.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

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

1 个答案:

答案 0 :(得分:43)

如果我正确理解了这个问题,您希望始终写入相对于当前脚本的路径。要获取当前正在执行的脚本所在目录的名称,可以使用__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技巧。