NodeJS使用相对路径访问文件

lon*_*ymo 60 fs node.js express

这似乎是一个直截了当的问题.但我无法解决这个问题.在helper1.js中我想访问foobar.json(来自config/dev/)

root
  -config
   --dev
    ---foobar.json
  -helpers
   --helper1.js
Run Code Online (Sandbox Code Playgroud)

我无法让这个工作fs:我如何找到父文件夹?

这里的任何帮助都会很棒.

Aer*_*diR 138

您可以使用该path模块将helper1.js生命所在目录的路径加入到相对路径中foobar.json.这将给你绝对的路径foobar.json.

var fs = require('fs');
var path = require('path');

var jsonPath = path.join(__dirname, '..', 'config', 'dev', 'foobar.json');
var jsonString = fs.readFileSync(jsonPath, 'utf8');
Run Code Online (Sandbox Code Playgroud)

假设UTF8编码,这应该适用于Linux,OSX和Windows.

  • @osrpt最好使用`__dirname`,因为无论运行helper1脚本的上下文如何,路径都是正确的(例如`node helpers/helper1.js`将从根目录开始工作). (10认同)
  • 完美的工作!我不是路径,而是__dirname +'/ ..' (2认同)

Adi*_*rab 11

简单!命名的文件夹..是父文件夹,因此您可以创建所需文件的路径

var foobar = require('../config/dev/foobar.json');
Run Code Online (Sandbox Code Playgroud)

如果你需要上升两个级别,你会写../../

这个SO答案和它的评论中有关于此的更多细节

  • 这只适用于json/js文件.它不适用于其他类型的文件,如xml.更好的方法是path.join() (7认同)
  • 如果您从另一个文件夹调用文件,这不是一个很好的解决方案。如果您的结构是 src->utils->someUtilFile.js 并且还有第二个文件 src->logic->someLogic.js 并且您使用 ../../utils/someUtilFile.js 这将起作用。但是如果你从不同的结构目录调用 someUtilFile.js 这将不起作用。 (5认同)
  • 请在此处为您的代码添加一些说明. (2认同)