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
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$
8条答案
按热度按时间zsohkypk1#
DEBUG=myapp:* npm start
由两部分组成。第一部分为
DEBUG=myapp:*
,第二部分为npm start
您可以先在命令行工具中运行
DEBUG=myapp:*
,然后再运行npm start
。DEBUG=myapp:*
意味着你告诉nodejs你想打开日志记录以进行调试。记住用你的应用名称替换
myapp
。你可以在package.json文件中的"name"
属性下找到你的应用名称。myapp:*
中的*
表示查看Express中使用的所有内部日志如果您只想查看路由器实现的日志,则将DEBUG的值设置为
myapp:router
。同样,要仅查看应用程序实现的日志,则将DEBUG的值设置为myapp:application
,依此类推。npm start
告诉npm运行package.json文件中声明的scripts
,脚本名为start
Source: https://expressjs.com/en/guide/debugging.html
uujelgoq2#
DEBUG
被设置为npm
和子进程的环境变量,但没有在shell中设置,请考虑以下情况:在你的例子中,值
myapp:*
被赋值给变量DEBUG
。这个变量将在npm
中可用,我不能回答为什么需要它。niknxzdl3#
事实证明,我认为这比实际情况要复杂得多。切普纳的回答让我的头脑中有些问题得到了解决。
我创建了一个打印
DEBUG
变量的python脚本,并调用了它而不是npm start
$ DEBUG=myapp:* python printvar.py
果然,这打印了
myapp:*
。似乎我遗漏的一个重要部分是变量赋值后的空格用作命令和:*
之间的分隔符,它只不过是赋值给DEBUG
的变量的一部分。e4eetjau4#
DEBUG是一个环境变量,通过通配符 * 设置为myapp应用程序中的所有调试器,用于会话持续时间。DEBUG变量由“tiny node.js & browser debugging utility for your libraries and applications”使用,其文档可以在这里找到。
vshtjzan5#
这是一项临时任务;
npm
在其环境中看到分配的值,但它不会影响当前shell。DEBUG
在npm
退出后保留其所有值(或保持未设置)。66bbxpm56#
:只是赋给env变量的文本。
这条线是做什么的,它是如何工作的,如下所示:
首先,我将讨论express内部级别的调试消息。
下面的设置只显示内部路由器的内部日志级别消息
现在为了查看“应用程序”级别的DEBUG语句。这些语句是你用调试功能添加到代码中的。
它与你的模块依赖关系有关。传入调试包的值。值可以是任何任意名称-也就是说,它们不需要匹配package.json,文件,对象变量名称等。但是env变量DEBUG值需要与你的代码中传入调试包的值相对应。
这行代码
考虑这两个文件
然后,如果我们运行以下场景:
我们得到以下结果:
screen shot
为了查看内部和“应用程序”级别的日志记录,您可以执行以下操作:
DEBUG=myapp:*,express:router npm start
screen shot
sdnqo3pr7#
DEBUG=myapp:* npm start
手段
1.设置一个环境变量DEUBG等于“myapp:*"。你可以通过以下方式测试它:
结果是B
1.运行
npm start
这样一个环境变量。你也可以通过以下方式测试它:接入节点终端并输入
你将看到process.env中的所有变量
同样,您可以设置不同的端口
服务器将侦听4000(如果您有这样的块)
gc0ot86w8#
它不仅限于Express,更广泛地说,它确实是一个名为debug的流行NPM包的工作方式,它也在Express内部使用。在后台,debug包期望
DEBUG
环境变量来确定 * 要打印的调试消息 *(可以在控制台上,或到文件中,或到stdout中由日志聚合器服务收集)。特别是在Express的情况下,为了查看其中使用的所有内部日志,我们在启动应用程序时将could环境变量设置为
DEBUG
。例如,在Linux上,运行:或者,要仅从应用程序实现中查看日志,请运行:
以上两个命令(
FOO=bar command
)中使用的语法是一般的Linux-y方式,用于定义一个一次性的环境变量,该变量只对一个命令的单次执行是独占的,也就是说,只对command
是可访问的,并且只在那一次。这是非常有益的,因为它不会不必要地污染环境变量的全局空间。debug类似于console.log的增强版本,但与console.log不同,我们不必在生产代码中注解掉debug日志。相反,日志记录默认关闭,可以通过使用DEBUG环境变量有条件地打开。
您还可以指定多个调试命名空间(无论是关于Express,还是关于任何其他模块,通过分配逗号分隔的名称列表:
如果你想知道什么是“namespace”,它同样与debug包有关,例如,考虑这个片段:
什么是'http:server'?它只是特定日志的标志/命名空间,您将传递给DEBUG环境变量以打开调试。所以现在您可以这样做:
要启用上述日志,必须启用“http:server”命名空间,因此我们将执行以下操作:
你可以检查任何第三方包的package.json,看看他们是否使用了debug模块,如果他们使用了,你可以检查他们定义的命名空间,并使用相同的方法(传递
DEBUG
环境变量来传递所需的命名空间)来查看他们的日志。阅读更多关于“debug”软件包here和here的信息。