【问题标题】:Why NODE_DEBUG=fs environment variable is set but not working?为什么设置了 NODE_DEBUG=fs 环境变量但不起作用?
【发布时间】:2015-11-13 13:15:22
【问题描述】:

关于 fs 模块的 Node.js 文档说 (https://nodejs.org/api/fs.html#fs_file_system):

要跟踪到原始调用站点,请设置 NODE_DEBUG 环境变量:

以及设置fs 环境变量的示例:

$ env NODE_DEBUG=fs node script.js
fs.js:66
    throw err;
          ^
Error: EISDIR, read
at rethrow (fs.js:61:21)
at maybeCallback (fs.js:79:42)
at Object.fs.readFile (fs.js:153:18)
at bad (/path/to/script.js:2:17)
at Object.<anonymous> (/path/to/script.js:5:1)
<etc.>

但是,如果我在命令行中预先设置 fs 环境变量或在脚本中使用 process.env,则该变量已设置但不起作用,则不会显示任何跟踪:

命令行中的前期:

$ env NODE_DEBUG=fs // set before running a script
$ node script.js // doesn't bring the trace

在脚本中:

'use strict';
process.env.NODE_DEBUG = 'fs'; // set it on the second line of a script

<...> // script goes here

我这两种情况结果如下,没有任何痕迹,虽然设置了NODE_DEBUG=fs:

fs.js:81
      throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs
        ^
Error: EISDIR, read
    at Error (native)

问题是。 为什么命令行内联变量设置有效:

$ env NODE_DEBUG=fs node script.js,

但其他设置方法不起作用?

【问题讨论】:

    标签: javascript node.js environment-variables


    【解决方案1】:

    env 在特定环境下运行程序。如果没有传递一个,它会列出环境变量;它不能修改其父进程的环境。要设置当前会话的环境变量,请使用export

    export NODE_DEBUG=fs
    node script.js
    

    Shell 将允许您同时省略 exportenv,但:

    NODE_DEBUG=fs node script.js # Like env; doesn’t create an exported NODE_DEBUG
    NODE_DEBUG=fs
    node script.js
    

    【讨论】:

    • 另外,在脚本中设置环境变量不起作用的原因是引导过程已经调用了调试日志功能(甚至在脚本执行之前),它只评估process.env.NODE_DEBUG @ 987654321@.
    • @mscdex 是的,但fs 模块决定像this,对吧?
    • 我不明白。在一个脚本中,我在任何require 命令之前设置了process.env.NODE_DEBUG='fs'var fs = require('fs') 跟在 process.env.NODE_DEBUG='fs' 之后。关于process.env 的文档说:您可以写入此对象,但更改不会反映在您的进程之外。 (nodejs.org/api/process.html#process_process_env)。据我了解,该变量应该适用于这一过程。但事实并非如此。这是否意味着所有requires 都在开始解析脚本之前完成?在哪里可以阅读有关 Node.js 引导过程的更多信息?
    • @thefourtheye 模块子系统会立即加载,并且它本身已经 require()s fs 加载命令行上提供的脚本。
    猜你喜欢
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多