【问题标题】:Node.js script hangs on require, but works fine in the REPLNode.js 脚本在 require 上挂起,但在 REPL 中运行良好
【发布时间】:2020-04-09 03:59:20
【问题描述】:

我在 Ubuntu 18.04 LTS 上运行 node.js。我似乎在使用 require 时得到不同的行为,这取决于我是在 REPL 中还是在脚本中使用它。具体来说,我使用npm下载lightstreamer-client-node。现在,我打开一个终端并执行以下操作:

colin@colin-XPS-15-9550:~$ node
> var x = require('lightstreamer-client-node')

这很好用。

现在我想在脚本中使用这个包。我创建了一个文本文件 node_test.js 只包含以下行:

var x = require('lightstreamer-client-node')

然后我打开一个终端并运行命令:

colin@colin-XPS-15-9550:~$ node /home/colin/node_test.js

这会无限期地挂在闪烁的光标上。

我是 node.jsJavaScript 的新手,所以这可能是预期的行为。我已经阅读了一些关于 require 函数的内容,但似乎找不到它的解释。请注意,如果我将 lightstreamer-client-node 替换为其他一些节点模块,例如safe-buffer,然后一切正常,无论我使用 REPL 还是脚本。

【问题讨论】:

  • 如果在 require 语句之后添加第二行 ... 像 console.log('hello world') 会发生什么?
  • 您是否尝试在文件中添加更多代码?我能够require 它,并且 require 是文件中唯一的东西,它确实像你说的那样挂起。但是,我放了一堆随机的打印语句。它们打印得很好,但后来挂了。然后我在脚本末尾添加了process.exit(0);,它正常退出了。也许该特定软件包会出现挂起。
  • @JaromandaX 感谢您的回复。我只是将console.log('message 1') 放在require 之前和console.log('message 2') 放在require 之后。两个语句都打印出来,然后是闪烁的光标。
  • 所以,阻止节点进程结束的不是 require - 它是那个库中的东西 - 可能有充分的理由 - 谁知道,但你可以安全地编写使用它的代码图书馆
  • @tycrek 我刚刚在我的机器上复制了它。感谢您的回复。也许它应该发生。 LightStreamer 用于与服务器建立双向连接,所以我想这有点道理?我是这个编程领域的新手,所以我的问题可能有点幼稚。

标签: javascript node.js lightstreamer


【解决方案1】:

该过程似乎挂起,因为库 lightstreamer-client 为其内部活动安装了一个带有函数 setInterval 的计时器,并且 nodejs 不允许在有活动任务时正常关闭。所以终止脚本的唯一方法是使用函数 process.exit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多