Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js nodejs';util';有时是全球性的吗?_Node.js - Fatal编程技术网

Node.js nodejs';util';有时是全球性的吗?

Node.js nodejs';util';有时是全球性的吗?,node.js,Node.js,我有一个函数调用为util.endsWith(str,end)的模型,但我忘记导入我的util文件。通常情况下,我预计会出现如下错误: 无法调用未定义的方法“endsWith”或类似的方法 但我得到的错误是: TypeError:Object#没有方法“endsWith” 表示定义了util。我对它做了一个console.log,发现它与您从require('util')获得的对象相同 在这个文件中我当然不需要util模块,在我的文件中也找不到这样做的任何地方(这并不是说我希望在另一个文件中需要

我有一个函数调用为
util.endsWith(str,end)
的模型,但我忘记导入我的util文件。通常情况下,我预计会出现如下错误:

无法调用未定义的方法“endsWith”
或类似的方法

但我得到的错误是:

TypeError:Object#没有方法“endsWith”

表示定义了
util
。我对它做了一个console.log,发现它与您从
require('util')
获得的对象相同

在这个文件中我当然不需要util模块,在我的文件中也找不到这样做的任何地方(这并不是说我希望在另一个文件中需要一些东西)

有趣的是,
util
仅在我从其他地方需要此模块时定义;如果我只是运行文件,那么
util
是未定义的

这正常吗



我的文件没有那么复杂(很可能您忘记在另一个模块中的某个位置执行
var util
,该模块将
util
分配给该模块。这将导致创建一个全局变量

这样可能会泄漏更多全局变量。 通过执行以下操作,您可以了解正在创建哪些全局文件:

var oldGlobalNames = Object.keys(global)
在主脚本的顶部。然后执行

console.log(_.difference(Object.keys(global), oldGlobalNames))
在底部

这将使用来自的
差异
功能

或者使用模块

另一个想法是:在项目范围内搜索
util=
(包括node\u modules dir)。了解
util
的分配位置


另请参见

我认为这是repl与脚本解释器的比较。当您运行repl(无论是
节点
还是
咖啡
)时,
util
似乎确实可以作为预导入的模块使用。但是,当您运行它们并传递脚本参数时,
util
不存在:

node -e 'console.log(util)'

[eval]:1
console.log(util)
            ^
ReferenceError: util is not defined
    at [eval]:1:13
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:456:26)
    at evalScript (node.js:532:25)
    at startup (node.js:80:7)
    at node.js:901:3

据我所知,这不是节点模块的工作方式。无论如何,这个javascript是由coffeescript生成的,所以不可能“忘记”将
var
放在浏览器中,我认为你所说的对浏览器是正确的,但我不在浏览器中。@PagodaJosh,如果它只有100行代码,就粘贴代码吧!如果它确实是全局的,那就是罪魁祸首,第三方模块也可能有问题。我认为,如果你一直使用CoffeeScript,几乎不可能意外泄漏全局变量。但是,也许你也有一些常规的JS代码。@MerynStol我应该向你道歉;泄漏东西的是第三方JS模块。我觉得全局变量变量无法在nodejs中创建,因此我起初没有对此进行调查。大约100行CoffeeScript可能会出现很多问题是的,我注意到所有常规模块在node REPL中都是全局的,但我正在使用
node myfile.js
启动我的代码,所以我不认为是这样。@PagodaJosh我以为你说你在使用coffee脚本?那为什么不
coffee myfile.coffee
node
> util
{ format: [Function],
  deprecate: [Function],
  print: [Function],
  puts: [Function],......