bash 'DEBUG=myapp:* npm start' 实际在做什么的解释
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36240385/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Explanation for what 'DEBUG=myapp:* npm start' is actually doing
提问by Pak
The getting started page for the Express application generator (located here) says to start the server by using $ DEBUG=myapp:* npm start
if using MacOS or Linux.
Express 应用程序生成器的入门页面(位于此处)说,$ DEBUG=myapp:* npm start
如果使用 MacOS 或 Linux,则通过使用来启动服务器。
This works fine, but I'm having trouble understanding what this line is actually doing. I would have guessed that it would be assigning something to the variable DEBUG
, but after exiting the server I ran echo $DEBUG
and it printed nothing. I'm guessing the :
is somehow key here, but it's not clear to me how/why.
这工作正常,但我无法理解这条线实际上在做什么。我会猜到它会为变量分配一些东西DEBUG
,但是在退出服务器后我跑了echo $DEBUG
它并没有打印任何东西。我猜这:
在某种程度上是关键,但我不清楚如何/为什么。
Hopefully someone can break this down for me.
希望有人能帮我解决这个问题。
采纳答案by Pak
It turns out I was thinking that this was far more complicated than it actually is. Chepner's answer got some gears unstuck in my head.
事实证明,我认为这比实际情况复杂得多。Chepner 的回答让我脑子里有些混乱。
I created a python script that prints the DEBUG
variable and called it instead of npm start
我创建了一个 python 脚本来打印DEBUG
变量并调用它而不是npm start
$ DEBUG=myapp:* python printvar.py
$ DEBUG=myapp:* python printvar.py
Sure enough, this printed myapp:*
. It seems the big piece that I was missing was that the space after the variable assignment is used as a separator between the commands and the :*
is nothing more than text that's part of the variable that gets assigned to DEBUG
.
果然,这个打印出来了myapp:*
。似乎我遗漏的重要部分是变量赋值后的空格用作命令之间的分隔符,而 the:*
只不过是分配给DEBUG
.
回答by Andrew Lam
DEBUG=myapp:* npm start
consist of two parts.The first part is
DEBUG=myapp:*
and the second part isnpm start
You may run
DEBUG=myapp:*
first in your command-line tool, and then followed by runningnpm start
.DEBUG=myapp:*
means you are telling nodejs that you want to turn on logging for debugging purposes.- Remember to replace
myapp
with your app name. You can find your app name in package.json file under"name"
property. - The
*
inmyapp:*
means to see all the internal logs used in Express - If you only want to see the logs from the router implementation, then set the value of DEBUG to
myapp:router
. Likewise, to see logs only from the application implementation set the value of DEBUG tomyapp:application
, and so on.
- Remember to replace
npm start
is telling npm to run yourscripts
stated in the package.json file and the script name is calledstart
回答by Eric Tamminga
DEBUG is an environment variable set to all debuggers in the myapp app via the wildcard character * for the duration of the session. The DEBUG variable is used by the "tiny node.js & browser debugging utility for your libraries and applications", for which documentation can be found here.
DEBUG 是一个环境变量,在会话期间通过通配符 * 设置为 myapp 应用程序中的所有调试器。DEBUG 变量由“用于库和应用程序的微小 node.js 和浏览器调试实用程序”使用,相关文档可在此处找到。
回答by chepner
This is a temporary assignment; npm
sees the assigned value in its environment, but it does not affect the current shell. DEBUG
retains whatever value it had (or remains unset) after npm
exits.
这是一个临时任务;npm
在其环境中看到指定的值,但不影响当前 shell。退出DEBUG
后保留它所拥有的任何值(或保持未设置)npm
。
回答by andlrc
DEBUG
is set as an environment variable for npm
and sub processes but not set in your shell, consider this:
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
In your case the value myapp:*
gets assigned to the variable DEBUG
. And this variable will be available inside npm
, for what reason it's needed I cannot answer.
在您的情况下,值myapp:*
被分配给变量DEBUG
。而这个变量将在内部可用npm
,出于什么原因需要它,我无法回答。
回答by DaveS_550
The : is just text that gets assigned to the env variable.
: 只是分配给 env 变量的文本。
What the line is doing and how it works is as follows:
该生产线正在做什么以及它是如何工作的如下:
First I'll discuss express internal level debug messages. The following env setting all display the same internal log level
首先,我将讨论表达内部级别的调试消息。以下环境设置都显示相同的内部日志级别
DEBUG=express:*, npm start
DEBUG=express.*, npm start
DEBUG=express*, npm start
And the following setting displays the internal log level messages for just the internal router
以下设置仅显示内部路由器的内部日志级别消息
DEBUG=express:router, npm start
DEBUG=express.router, npm start
Now in order to see "application" level DEBUG statements. Those that you've added to your code with the debug function.
现在以查看“应用程序”级别的 DEBUG 语句。您使用调试功能添加到代码中的那些。
It has to do with your module dependencies. The value(s) passed into the debug package. The values can be any arbitrary name - that is they don't need to match package.json, file, object variable name, etc. However the env variable DEBUG value needs to correspond to the value passed into the debug package in your code.
它与您的模块依赖项有关。传递到调试包的值。这些值可以是任意名称 - 即它们不需要匹配 package.json、文件、对象变量名称等。但是 env 变量 DEBUG 值需要对应于传递到代码中调试包的值。
This line of code
这行代码
var debug = require('debug') ('myapp:myapp');
Consider these two files
考虑这两个文件
www
…
var debug = require('debug')('myapp:www');
app.js
…
var debug = require('debug')('myapp:app');
Then if we run the following scenarios:
那么如果我们运行以下场景:
- DEBUG=myapp:* npm start
- DEBUG=myapp:www npm start
- DEBUG=myapp:app npm start
- DEBUG=myapp:* npm start
- DEBUG=myapp:www npm start
- DEBUG=myapp:app npm start
We get the following:
我们得到以下信息:
vagrant@n1:~/despobaldo/server$ DEBUG=myapp:* npm start
> [email protected] 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
> [email protected] 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
> [email protected] 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$
In order to see both internal and "application" level logging you would doing something like this:
为了同时查看内部和“应用程序”级别的日志记录,您可以执行以下操作:
DEBUG=myapp:*,express:router npm start
DEBUG=myapp:*,express:router npm start
vagrant@n1:~/despobaldo/server$
vagrant@n1:~/despobaldo/server$ DEBUG=myapp:*,express:router npm start
> [email protected] 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$