繁体   English   中英

获取 Node.js 中的父目录名称

[英]Get parent directory name in Node.js

我正在使用 Node.js,我想获取文件的父目录名称。 我有文件"../test1/folder1/FolderIWant/test.txt"

我想得到"FolderIWant"

我努力了:

var path = require('path');
var parentDir = path.dirname(filename);

但它返回../test1/folder1/FolderIWant

你想要的是path.basename

path.basename(path.dirname(filename))

更好地使用@danielwolf 的答案


使用split()pop()

path.dirname(filename).split(path.sep).pop()

丹尼尔沃尔夫的回答是正确的,如果你想要父目录的完整路径:

require('path').resolve(__dirname, '..')

从 06-2019 开始使用 node,我遇到了一个问题,只能访问filename 所以相反,我只是稍微修改了一下并使用了:

path.dirname(__filename).split(path.sep).pop()

所以现在你得到了你所在的当前目录的目录名,而不是完整路径。 尽管以前的答案似乎对其他人有用,但对我而言,它引起了问题,因为节点正在寻找常量或变量但找不到。

const path = require('path');

module.exports = path.dirname(process.mainModule.filename)

在任何地方使用它来获取根目录

process.mainModule属性在v14.0.0已弃用。 如果 foo.js 由node foo.js运行(例如 somedir/foo.js”),

const path = require("path");

module.exports = path.dirname(require.main.filename);

结果:somedir

改用 require.main

const path = require("path")
path.dirname(path.basename(__dirname))

最简单的方法,没有像路径这样的任何节点模块。 您可以通过以下方式轻松获取根文件夹名称。

var rootFolder = __dirname.split('/').pop();
console.log(rootFolder);

虽然这里的答案有些奏效,但我发现使用流行的app-root-path模块是一个更好的锚点,从中指定路径。

import { path as arp } from 'app-root-path'
import path from 'path'

const root = path.resolve(arp, '../') // the parent of the root path

export const rootDirname = root

示例用法如下:

import { rootDirname } from './functions/src/utils/root-dirname'
import { getJsonFromFile } from './app/utils/get-json-from-file'

const firebaseJson = getJsonFromFile(`${rootDirname}/firebase.json`)

也许不是这里的最佳答案,而是其他答案未涵盖的选项。

典型的__dirname解决方案在 ESM scope 中不起作用。 为了在目录树中上移一级,我想出了以下解决方案:

import { fileURLToPath } from "url";
import path from "path";

const __filename = fileURLToPath(import.meta.url);
// First find out the __dirname, then resolve to one higher level in the dir tree
const __dirname = path.resolve(path.dirname(__filename), "../");

如果您只需要文件所在的绝对目录路径,则可以path.resolve()调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM