require()如何在JavaScript中工作以及它的用法如何影响console.log?

时间:2015-04-26 14:03:16

标签: javascript node.js require console.log

有人可以解释一下require()和console.log在javascript中是如何工作的吗? 我有一段代码剪断了一些与此相近的内容:

var somevar = require('C:/Users/Me/Folder/SomeFolder/somefile.js');
console.log(somevar);

在控制台中,我看到以下内容:

{ _maxListeners: 0,
  reset: [Function],
  verify: [Function],
  report: [Function],
  getSource: [Function],
  getSourceLines: [Function],
  getAllComments: [Function],
  getComments: [Function],
  getJSDocComment: [Function],
  getAncestors: [Function],
  getNodeByRangeIndex: [Function],
  getScope: [Function],
  markVariableAsUsed: [Function],
  getFilename: [Function],
  defineRule: [Function],
  defineRules: [Function],
  defaults: [Function] }

somefile.js这是一个包含javascript代码的大文件(超过32 000行)。确切地说,这是我的ESLint。

为什么它只在控制台中打印这些结果?在somefile.js中还有更多的函数,然后在上面列出,我希望看到更多。

在简单地要求Node.js var eslintfile = require('eslint');中的eslint模块之后,控制台中的输出略有不同:

 { linter: 
       { _maxListeners: 0,
         reset: [Function],
         verify: [Function],
         report: [Function],
         getSource: [Function],
         getSourceLines: [Function],
         getAllComments: [Function],
         getComments: [Function],
         getJSDocComment: [Function],
         getAncestors: [Function],
         getNodeByRangeIndex: [Function],
         getScope: [Function],
         markVariableAsUsed: [Function],
         getFilename: [Function],
         defineRule: [Function],
         defineRules: [Function],
         defaults: [Function] },
      cli: { execute: [Function] },
      CLIEngine: [Function: CLIEngine] }

为什么会这样?

上面的代码中没有任何目的。我只是在玩它。我只需要一个解释。任何建议,链接和想法都非常感谢。

我该怎么做才能看到代码中的所有函数并找到一个我需要在控制台中打印它或写入另一个文件?

3 个答案:

答案 0 :(得分:3)

require函数只会检索模块正在导出的内容(通过module.exports对象,这在CommonJS模块中是典型的)。由于console.log在对象上的一般行为是将它们检查到一定深度,因此您似乎要求的解释是两个模块实际上是不同的并且导出稍微不同的属性范围。虽然两者都是相同版本的ESLint,但第一个文件是捆绑的(在本例中为browserify')ESLint API,它不包含CLI引擎。这可以通过观察ESLint存储库中的package.jsonMakefile.js来找到。

require通过其包名在Node中的console.log时," main&#34}加载脚本,根据package.json,是"./lib/api.js"。此脚本将加载linter和一些与命令行界面相关的额外对象。

通过查看" Makefile.js"在line 44中,您可以看到使用browserify的构建操作将捆绑" eslint.js"及其依赖项,不包含任何其他内容(CLI部分,即)。这个捆绑is also triggered by the test command,由" test"调用。包中的脚本。

简而言之,两个模块是不同的,即使由相同的包组成。这会导致 PrimaryKeyID Column 2 Column 3 Row 1 (auto-incr.) x x 2 x x deleted row 3 x x inserted row 4 (should be 3) x x 输出不同。

答案 1 :(得分:0)

require将返回对模块放置到exports属性中的任何内容的引用。

您所说的文件包含的功能比使用console.log打印对象时看到的功能多得多。文件中的函数数量并不重要。重要的是exports

https://nodejs.org/api/modules.html#modules_module_exports

至于console.log,它将在提供的对象上调用util.inspect来构建它的字符串表示。它写入进程的STDOUT(标准输出)流。

https://nodejs.org/api/console.html#console_console_log_data

答案 2 :(得分:-1)

console.log()将括号中的任何内容的值打印到控制台中(只有开发人员可以看到)。