NodeJS 如何在子目录中的EJS模块中生成指向根目录的__dirname?

xxhby3vn  于 2023-05-06  发布在  Node.js
关注(0)|答案(1)|浏览(159)

我使用的EJS模块,并希望参考根目录中的所有文件。在过去,这将是__dirname,但根据此描述,它是不同的。这些说明很有帮助(https://blog.logrocket.com/alternatives-dirname-node-js-es-modules/),但我似乎仍然找不到正确的组合。
例如,我在根目录中有test.mjs,在脚本目录(scripts/test2.mjs)中有test2.mjs
test.mjs

import {fileURLToPath} from 'url';
import { dirname } from "node:path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log("test.mjs produces " + __dirname)

输出

test.mjs produces rootdir

test2.mjs

import {fileURLToPath} from 'url';
import { dirname } from "node:path";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
console.log("test2.mjs produces " + __dirname)

输出

test2.mjs produces rootdir/scripts
fsi0uk1n

fsi0uk1n1#

启动应用程序的初始脚本的完整路径位于:

process.argv[1]

而且,这可以从项目中的任何脚本访问,无论它位于何处,它总是返回相同的文件名。
所以,如果你想去掉文件名,只得到初始脚本的目录,你可以这样做:

import { dirname } from "node:path";

const rootDir = dirname(process.argv[1]);

根据您的项目脚本的结构以及您想要的结构中的确切目录,您可能希望从该目录向上或向下移动,但它至少为您提供了结构中的已知和一致的位置,可以从项目中的任何脚本访问。

相关问题