【问题标题】:Explanation for what 'DEBUG=myapp:* npm start' is actually doing解释 'DEBUG=myapp:* npm start' 实际在做什么
【发布时间】:2022-01-16 21:39:16
【问题描述】:

Express 应用程序生成器的入门页面(位于 here)表示如果使用 MacOS 或 Linux,则使用 $ DEBUG=myapp:* npm start 启动服务器。

这很好用,但我无法理解这条线实际上在做什么。我猜想它会为变量DEBUG 分配一些东西,但是在退出服务器后我运行echo $DEBUG 并且它什么也没打印。我猜: 是这里的关键,但我不清楚如何/为什么。

希望有人能帮我分析一下。

【问题讨论】:

  • chepner 所说的,: 只是价值的一部分。
  • 我也有同样的疑问。许多人只是复制文档而没有解释其用法。

标签: node.js bash express command-line


【解决方案1】:
  • DEBUG=myapp:* npm start由两部分组成。

  • 第一部分是DEBUG=myapp:*,第二部分是npm start

  • 您可以先在命令行工具中运行DEBUG=myapp:*,然后 然后运行npm start

  • DEBUG=myapp:* 表示您告诉 nodejs 您要打开日志记录以进行调试。

    • 记得将myapp 替换为您的应用名称。您可以在 "name" 属性下的 package.json 文件中找到您的应用名称。
    • myapp:*中的*表示查看Express中使用的所有内部日志
    • 如果您只想查看来自路由器实现的日志,请将 DEBUG 的值设置为myapp:router。同样,要仅查看来自应用程序实现的日志,请将 DEBUG 的值设置为 myapp:application,依此类推。
  • npm start 告诉 npm 运行你在 package.json 文件中声明的 scripts,脚本名称为 start

  • Source: https://expressjs.com/en/guide/debugging.html

【讨论】:

  • 这篇文章不正确。 debug 根本不看package.json。传递给require('debug')('some:app') 的内容就是传递给DEBUG=some:app 的内容。
  • @andrewlam 那个文件set 是什么?除了那个单一的文件之外,其他一切看起来都像一个快速生成器项目。
【解决方案2】:

DEBUG 设置为 npm 和子进程的环境变量,但未在您的 shell 中设置,请考虑:

HELLO=World bash -c 'echo $HELLO' # World
HELLO=World bash -c "bash -c 'echo \$HELLO'" # World
echo $HELLO # Nothing, assuming that HELLO was null before running the above snippets

在您的情况下,值myapp:* 被分配给变量DEBUG。这个变量将在npm 中可用,为什么需要它我无法回答。

【讨论】:

    【解决方案3】:

    DEBUG 是一个环境变量,在会话期间通过通配符 * 设置给 myapp 应用程序中的所有调试器。 DEBUG 变量由“用于库和应用程序的小型 node.js 和浏览器调试实用程序”使用,其文档可以在 here 找到。

    【讨论】:

      【解决方案4】:

      这是一个临时任务; npm 在其环境中看到分配的值,但它不会影响当前的 shell。在npm 退出后,DEBUG 保留其拥有的任何值(或保持未设置)。

      【讨论】:

        【解决方案5】:

        事实证明,我认为这比实际情况要复杂得多。 Chepner 的回答让我有些不知所措。

        我创建了一个 python 脚本来打印 DEBUG 变量并调用它而不是 npm start

        $ DEBUG=myapp:* python printvar.py

        果然,这打印了myapp:*。似乎我缺少的重要部分是变量分配后的空格用作命令之间的分隔符,:* 只不过是分配给DEBUG 的变量的一部分的文本。

        【讨论】:

        • 他们为什么要在myapp的末尾添加:*?
        【解决方案6】:

        : 只是分配给 env 变量的文本。

        线路的作用和工作原理如下:

        首先我将讨论表达内部级别的调试消息。以下环境设置都显示相同的内部日志级别

        DEBUG=express:*, npm start
        DEBUG=express.*, npm start
        DEBUG=express*, npm start
        

        以下设置仅显示内部路由器的内部日志级别消息

        DEBUG=express:router, npm start
        DEBUG=express.router, npm start
        

        现在以查看“应用程序”级别的 DEBUG 语句。您使用调试功能添加到代码中的那些。

        这与您的模块依赖关系有关。传递到调试包中的值。这些值可以是任意名称——即它们不需要匹配 package.json、文件、对象变量名称等。但是 env 变量 DEBUG 值需要与传递到代码中调试包的值相对应。

        这行代码

        var debug = require('debug') ('myapp:myapp');
        

        考虑这两个文件

        www
        …
        var debug = require('debug')('myapp:www');
        
        app.js
        …
        var debug = require('debug')('myapp:app');
        

        那么如果我们运行以下场景:

        1. DEBUG=myapp:* npm start
        2. DEBUG=myapp:www npm start
        3. DEBUG=myapp:app npm start

        我们得到以下信息:

        screen shot

        vagrant@n1:~/despobaldo/server$ DEBUG=myapp:* npm start
        
        > server@0.0.0 start /home/vagrant/despobaldo/server
        > node ./bin/www
        
          myapp:app here I am +0ms
          myapp:www Listening on port 3000 +8ms
        ^Cvagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$ DEBUG=myapp:www npm start
        
        > server@0.0.0 start /home/vagrant/despobaldo/server
        > node ./bin/www
        
          myapp:www Listening on port 3000 +0ms
        ^Cvagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$ DEBUG=myapp:app npm start
        
        > server@0.0.0 start /home/vagrant/despobaldo/server
        > node ./bin/www
        
          myapp:app here I am +0ms
        ^Cvagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$
        

        为了同时查看内部​​和“应用程序”级别的日志记录,您需要执行以下操作:

        DEBUG=myapp:*,express:router npm start

        screen shot

        vagrant@n1:~/despobaldo/server$
        vagrant@n1:~/despobaldo/server$ DEBUG=myapp:*,express:router npm start
        
        > server@0.0.0 start /home/vagrant/despobaldo/server
        > node ./bin/www
        
          express:router use '/' query +0ms
          express:router use '/' expressInit +4ms
          express:router use '/' logger +0ms
          express:router use '/' jsonParser +7ms
          express:router use '/' urlencodedParser +3ms
          express:router use '/' cookieParser +0ms
          express:router use '/' serveStatic +1ms
          myapp:app here I am +0ms
          express:router use '/' router +1ms
          express:router use '/users' router +0ms
          express:router use '/' <anonymous> +0ms
          express:router use '/' <anonymous> +0ms
          myapp:www Listening on port 3000 +7ms
        ^Cvagrant@n1:~/despobaldo/server$
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-04
          • 2014-11-17
          • 1970-01-01
          • 2011-08-07
          • 1970-01-01
          • 1970-01-01
          • 2018-12-05
          相关资源
          最近更新 更多