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

19

我有一个可执行的节点/JavaScript脚本,它有一个debug布尔值,如果设置为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个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接