介绍
__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)。