如何在 Node.js 中使用 __dirname

介绍

__dirname 是一个环境变量,它告诉您包含当前执行文件的目录的绝对路径。

在本文中,您将探索如何在您的 Node.js 项目中实现 __dirname

前提条件

要完成本教程,您将需要:

要了解更多关于 Node.js 的信息,请参阅我们的 如何在 Node.js 中编码系列。

本教程已通过 Node.js v17.2.0 和 'npm' v8.2.0 进行验证。

步骤1 - 设置项目

本教程将使用以下样本目录结构来探索 __dirname 是如何工作的:

 1dirname-example
 2  ├──index.js
 3  ├──public
 4  ├──src
 5  │  ├──helpers.js
 6  │  └──api
 7  │      └──controller.js
 8  ├──cronjobs
 9  │  └──hello.js
10  └──package.json

您可以通过在您的终端中创建一个dirname-example目录开始:

1mkdir dirname-example

导航到项目目录:

1cd dirname-example

将其初始化为 Node.js 项目:

1npm init --yes

现在,你将创建目录和文件来实验。

步骤 2 – 使用__dirname

您可以使用「__dirname」來檢查您的檔案在哪個目錄上活著。

src目录中的api子目录中创建和编辑controller.js:

1[label src/api/controller.js]
2console.log(__dirname)      // "/Users/Sam/dirname-example/src/api"
3console.log(process.cwd())  // "/Users/Sam/dirname-example"

然后运行脚本:

1node src/api/controller.js

cronjobs目录中创建和编辑hello.js:

1[label cronjobs/hello.js]
2console.log(__dirname)     // "/Users/Sam/dirname-example/cronjobs"
3console.log(process.cwd()) // "/Users/Sam/dirname-example"

然后运行脚本:

1node cronjobs/hello.js

请注意, __dirname 有不同的值,取决于你将其保存到哪个文件。 process.cwd() 方法也返回一个值,而不是项目目录. __dirname 变量总是返回你的文件居住的绝对路径。

步骤3 - 与董事会合作

在本节中,您将探索如何使用__dirname来创建新目录,指向它们,以及添加新文件。

创建新指南

若要在 index.js 文件中创建一个新目录,请将 __dirname 作为第一个参数插入 `path.join() 和新目录的名称作为第二个参数:

1[label index.js]
2const fs = require('fs');
3const path = require('path');
4const dirPath = path.join(__dirname, '/pictures');
5
6fs.mkdirSync(dirPath);

现在你已经创建了一个新的目录,图片,在调用了mdirSync()方法,其中包含__dirname作为绝对路径。

指向导向

另一个独特的功能是它能够指向目录. 在您的 index.js 文件中,声明变量并将 __dirname’ 值作为 path.join() 中的第一个参数,并将包含静态文件的目录作为第二个:

1[label index.js]
2express.static(path.join(__dirname, '/public'));

在这里,你告诉Node.js使用__dirname指向包含静态文件的公共目录。

将文件添加到一个目录

您也可以将文件添加到现有目录中. 在您的 index.js 文件中,声明变量,并将 `__dirname' 作为第一个参数和您希望添加的文件作为第二个参数:

1[label index.js]
2const fs = require('fs');
3const path = require('path');
4const filePath = path.join(__dirname, '/pictures');
5
6fs.openSync(filePath, 'hello.jpeg');

使用openSync()方法将添加文件,如果它不存在于您的目录中。

结论

Node.js 为您提供创建和指向目录的方法,并将文件添加到现有目录中,使用模块化环境变量。

如需进一步阅读,请参阅 Node.js 文档为 __dirname,以及关于在 Express.js 框架中使用 [__dirname] 的教程(https://andsky.com/tech/tutorials/use-expressjs-to-deliver-html-files)。

Published At
Categories with 技术
Tagged with
comments powered by Disqus