Nodejs REPL模式与运行.js文件的区别(比如说__dirname)的问题
Nodejs REPL模式与运行.js文件的区别(比如说__dirname)的问题
The name of the directory that the currently executing script resides in.
from http://nodejs.org/api/globals.html#globals_dirname
首先你得是个 script
REPL其实也可以得到:
PS C:\mongodb\bin> node
> process.cwd()
'C:\\mongodb\\bin'
Node.js REPL模式与运行.js文件的区别(比如说__dirname
)
背景介绍
在Node.js中,__dirname
是一个全局变量,它表示当前执行的脚本所在的目录。这在编写模块化代码时非常有用,特别是在处理文件路径或读取资源文件时。
REPL模式与运行.js文件的区别
1. __dirname
在REPL模式中的表现
当你在REPL(Read-Eval-Print Loop)模式下启动Node.js时,__dirname
表示的是你启动Node.js命令时所在的目录。例如:
PS C:\Users\example> node
> console.log(__dirname);
C:\Users\example
在这个例子中,__dirname
返回的是你在命令行中启动Node.js的目录。
2. __dirname
在运行.js文件时的表现
当你运行一个 .js
文件时,__dirname
返回的是该文件所在的目录。例如,假设你的项目结构如下:
/project
/src
app.js
如果你在 /project
目录下运行 src/app.js
,那么 __dirname
将返回 /project/src
。
// src/app.js
console.log(__dirname); // 输出: C:\path\to\your\project\src
示例代码
让我们通过一些简单的示例来说明这一点。
REPL模式示例
PS C:\Users\example> node
> console.log(__dirname);
C:\Users\example
运行.js文件示例
假设我们有以下目录结构:
/project
/src
app.js
在 app.js
中:
console.log(__dirname);
在命令行中运行:
PS C:\Users\example> node C:\path\to\your\project\src\app.js
C:\path\to\your\project\src
总结
- 在REPL模式下,
__dirname
返回的是你启动Node.js命令时所在的目录。 - 在运行
.js
文件时,__dirname
返回的是该文件所在的目录。
理解这些区别有助于更好地管理和组织你的Node.js项目,特别是在处理文件路径和资源文件时。
这个并没有如此简单吧,我在学习这篇的时候 mongoose教程 在REPL下会抛出
> personEntity.speak();
TypeError: Object { name: 'Krouky', _id: 52f48d9dba3964b539a9acff } has no method 'speak'
at repl:1:14
at REPLServer.self.eval (repl.js:110:21)
at repl.js:249:20
at REPLServer.self.eval (repl.js:122:7)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
在Node.js中,__dirname
是一个全局变量,表示当前执行脚本所在的目录名。在REPL模式下和通过运行 .js
文件时,__dirname
的表现形式有所不同。
在 .js 文件中使用 __dirname
当你在一个 .js
文件中使用 __dirname
时,它会返回该文件所在目录的绝对路径。例如:
// script.js
console.log(__dirname);
假设 script.js
位于 C:\myproject\src
目录下,那么输出将是:
C:\myproject\src
在REPL模式下使用 __dirname
在REPL模式下,__dirname
的值取决于你启动REPL时的当前工作目录。REPL默认使用 process.cwd()
来确定当前工作目录,而不是特定文件的目录。例如:
PS C:\mongodb\bin> node
> console.log(__dirname);
C:\mongodb\bin
> process.cwd();
'C:\\mongodb\\bin'
示例代码
在 .js
文件中使用 __dirname
创建一个简单的 .js
文件:
// script.js
console.log('The directory is:', __dirname);
运行该文件:
PS C:\myproject\src> node script.js
The directory is: C:\myproject\src
在REPL模式下使用 __dirname
启动REPL并检查 __dirname
和 process.cwd()
:
PS C:\mongodb\bin> node
> console.log(__dirname);
C:\mongodb\bin
> process.cwd();
'C:\\mongodb\\bin'
总结
- .js 文件:
__dirname
返回的是该文件所在的目录。 - REPL模式:
__dirname
返回的是启动REPL时的当前工作目录(即process.cwd()
的值)。
理解这些区别有助于更好地管理文件路径和处理不同的应用场景。