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

Posted

技术标签:

【中文标题】模块内的相对文件系统写入路径【英文标题】:Relative file system write path within module 【发布时间】:2013-02-21 16:29:59 【问题描述】:

我有一个具有调试布尔值的可执行节点/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】:

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

【讨论】:

以上是关于模块内的相对文件系统写入路径的主要内容,如果未能解决你的问题,请参考以下文章

Python 包内的导入问题(绝对导入和相对导入)

Node 读取 + 写入 + 路径问题

Python os模块--路径文件系统命令等操作

node_fs文件系统模块_常用方法

C程序只能在给定绝对路径时写入文件,而在给定相对路径时不能写入

如何在属性文件中写入相对路径