【问题标题】:What's the difference between process.cwd() vs __dirname?process.cwd() 与 __dirname 有什么区别?
【发布时间】:2012-04-10 02:09:16
【问题描述】:

有什么区别

console.log(process.cwd())

console.log(__dirname);

我见过两者都在类似的情况下使用。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    process.cwd()返回当前工作目录,

    即您从中调用 node 命令的目录。

    __dirname 返回包含 JavaScript 源代码文件的目录的目录名

    【讨论】:

    • 这是否意味着除了require() 之外的所有情况下process.cwd() 都是. 的同义词?
    • @AlexanderGonchiy 正确,. 是相对于 process.cwd()(所以是同义词),除了 require() 相对于当前执行文件起作用。请参阅here 了解更多信息。
    • 请注意,当前工作目录可以在运行时使用 process.chdir 更改,因此它并不总是调用节点的目录。
    【解决方案2】:

    根据节点 js doc process.cwd()

    cwd是全局对象process的方法,返回一个字符串值,即Node.js进程的当前工作目录。

    根据节点 js doc __dirname

    当前脚本的目录名称作为字符串值。 __dirname 实际上不是全局的,而是每个模块的本地名称。

    让我举例说明,

    假设我们有一个位于C:/Project/main.js 中的main.js 文件 并运行node main.js 这两个值都返回相同的文件

    或简单地使用以下文件夹结构

    Project 
    ├── main.js
    └──lib
       └── script.js
    

    main.js

    console.log(process.cwd())
    // C:\Project
    console.log(__dirname)
    // C:\Project
    console.log(__dirname===process.cwd())
    // true
    

    假设我们在项目的子目录中有另一个文件script.js文件,即C:/Project/lib/script.js并运行node main.js,这需要script.js

    main.js

    require('./lib/script.js')
    console.log(process.cwd())
    // C:\Project
    console.log(__dirname)
    // C:\Project
    console.log(__dirname===process.cwd())
    // true
    

    script.js

    console.log(process.cwd())
    // C:\Project
    console.log(__dirname)
    // C:\Project\lib
    console.log(__dirname===process.cwd())
    // false
    

    简单地说就是:

    process.cwd() 返回我们运行节点进程的目录的值,而

    __dirname返回当前运行文件所在目录的值。

    【讨论】:

      【解决方案3】:

      了解每个的范围可以让事情更容易记住。

      processnode 的全局对象,.cwd() 返回节点运行的位置。

      __dirnamemodule的属性,代表模块的文件路径。在节点中,一个模块驻留在一个文件中。

      同样,__filenamemodule 的另一个属性,它保存模块的文件名。

      【讨论】:

        【解决方案4】:

        $find proj

        proj
        proj/src
        proj/src/index.js
        

        $cat proj/src/index.js

        console.log("process.cwd() = " + process.cwd());
        console.log("__dirname = " + __dirname);
        

        $cd proj; node src/index.js

        process.cwd() = /tmp/proj
        __dirname = /tmp/proj/src
        

        【讨论】:

          猜你喜欢
          • 2011-12-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-19
          • 2013-03-14
          • 2018-09-14
          • 2014-01-03
          相关资源
          最近更新 更多