解释'DEBUG = myapp:*npm start'实际上是在做什么

Pak*_*Pak 9 bash command-line node.js express

Express应用程序生成器(位于此处)的入门页面表示$ DEBUG=myapp:* npm start使用MacOS或Linux 启动服务器.

这很好,但是我无法理解这条线实际上在做什么.我猜想它会为变量分配一些东西DEBUG,但在退出服务器后我跑了echo $DEBUG,它什么都没打印.我猜:这里有点关键,但我不清楚如何/为什么.

希望有人可以为我打破这个.

And*_*eng 9

  • DEBUG=myapp:* npm start 由两部分组成.

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

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

  • DEBUG=myapp:* 意味着您要告诉nodejs您要打开日志记录以进行调试.

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

  • 资料来源:https://expressjs.com/en/guide/debugging.html

  • 这个帖子是不正确的。`debug` 根本不看 `package.json`。传递给 `require('debug')('some:app')` 的内容就是传递给 `DEBUG=some:app` 的内容。 (2认同)

and*_*lrc 5

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
Run Code Online (Sandbox Code Playgroud)

在您的情况下,该值myapp:*被分配给变量DEBUG。这个变量将在内部可用npm,出于什么原因需要它我无法回答。


Pak*_*Pak 4

事实证明,我认为这比实际情况要复杂得多。切普纳的回答让我的头脑有些混乱。

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

$ DEBUG=myapp:* python printvar.py

果然,这个打印出来了myapp:*。看来我遗漏的一大块是变量赋值后的空格用作命令之间的分隔符,而:*只不过是分配给 的变量的一部分的文本DEBUG