node.js - 模块内的相对文件系统写入路径

标签 node.js path relative-path fs

我有一个具有调试 bool 值的可执行 Node/javascript 脚本,如果设置为 true,则会写入几个文件。这个可执行文件也是 Node 模块。根据运行脚本的用户的工作目录,该函数似乎找不到要写入文件的目录。

模块的结构是这样的

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

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

最佳答案

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

关于node.js - 模块内的相对文件系统写入路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254861/

相关文章:

ios - NSURLProtocol 和相对路径

node.js - Node 服务器无法启动

c# - 如何在目录中查找子文件夹的名称

php - 如何相对要求 PHP 文件(在不同的目录级别)?

pdf - 如何在 Puppeteer 中添加所有相对 URL 的绝对路径(本地 html 文件应从网络加载图像以生成 PDF)

ios - 单击 AVAudioplayer Swift Xcode 中的按钮时自动更改文件(url、路径)

php - 绝对路径与相对路径

json - 使用 expressjs 和 serve-static 在 Nodejs 中提供静态 .json 文件

node.js - 在 gulp 文件中包含外部文件

node.js - npm 不会递归安装 devDependency