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

时间:2016-03-26 20:14:33

标签: node.js bash express command-line

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

这很好用,但是我无法理解这条线实际上在做什么。我猜想它会为变量DEBUG分配一些内容,但在退出服务器之后我运行echo $DEBUG并且它什么都没有打印。我猜测:在某种程度上是关键,但我不清楚如何/为什么。

希望有人可以为我解决这个问题。

6 个答案:

答案 0 :(得分:9)

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

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

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

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

    • 请务必使用您的应用名称替换"name"。您可以在*属性下的package.json文件中找到您的应用名称。 enter image description here
    • myapp:*中的myapp:router表示查看Express
    • 中使用的所有内部日志
    • 如果您只想查看路由器实现中的日志,请将DEBUG的值设置为myapp:application。同样,要仅查看应用程序实现中的日志,请将DEBUG的值设置为npm start,依此类推。
  • scripts告诉npm运行package.json文件中声明的start,脚本名称为public void insert(history t) { try { String query = "INSERT INTO " + TABLE_NAME + " VALUES(null, '" + t.getWord() + "', '" + t.getDate() + "', '" + t.getMean() + "')"; SQLiteDatabase db = this.getWritableDatabase(); db.beginTransaction(); // db.execSQL(query); // db.close(); ContentValues values = new ContentValues(); values.put("word", t.getWord()); values.put("date", t.getDate()); values.put("mean", t.getMean()); long id = db.insert(TABLE_NAME, null, values); db.setTransactionSuccessful(); db.endTransaction(); db.close(); // I have 6 rows in table after inserted a row i get size of table = 7(increase +1). // After that i try to get size of table in other activity but it's still only 6. I used Explorer in order to see all of data on android but i could not find the new row. Toast.makeText(context, "id inserted = " + id + " / size of table =" + getAll().size(), Toast.LENGTH_SHORT).show(); // Toast show : id inserted =7/ size of table =7 } catch (Exception ex) { Toast.makeText(context, "ex :" + ex.getMessage(), Toast.LENGTH_SHORT).show(); } enter image description here

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

答案 1 :(得分:3)

DEBUG是一个环境变量,在会话期间通过通配符*设置为myapp应用程序中的所有调试器。 DEBUG变量由" tiny node.js&您的库和应用程序的浏览器调试实用程序",可以找到文档here

答案 2 :(得分:2)

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

答案 3 :(得分:2)

事实证明,我认为这比实际情况要复杂得多。切普纳的回答让我脑子里的齿轮松了一圈。

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

$ DEBUG=myapp:* python printvar.py

果然,打印出myapp:*。我遗漏的一件大事似乎是变量赋值后的空格被用作命令之间的分隔符而:*只不过是被分配给变量的变量的一部分的文本。 DEBUG

答案 4 :(得分:2)

condition_dict={ 'rewards':show_reward_form, 'user_conditionals':show_conditionals_form, 'organizer_info': lambda w:(show_organizer_info_form(w.request.user)), } 被设置为lambda w和子进程的环境变量但未在shell中设置,请考虑以下事项:

DEBUG

在您的情况下,值npm被分配给变量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:*内提供,由于什么原因我无法回答。

答案 5 :(得分:0)

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

该行正在做什么以及如何运作如下:

首先,我将讨论明确的内部级调试消息。以下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
  4. 我们得到以下信息:

    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$