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

How require() works in JavaScript and how its usage affects 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] }

为什么会这样?

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

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

console.log() 将括号中的值打印到控制台(仅开发人员可见)。

require 将 return 引用模块放入其 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

require 函数只会检索模块正在导出的任何内容(通过 module.exports 对象,这在 CommonJS 模块中很典型)。由于 console.log 对对象的一般行为是将它们检查到一定深度,您似乎要求的解释是这两个模块实际上不同并且导出的属性范围略有不同。尽管两者都是相同版本的 ESLint,但第一个文件是捆绑的(在本例中是浏览器化的)ESLint API,它不包含 CLI 引擎。这可以通过观察 ESLint 存储库中的 package.json and Makefile.js 来发现。

require 在 Node 中通过包名调用库时,"main" 脚本被加载,根据 package.json,它是 "./lib/api.js"。此脚本将加载 linter 和一些与命令行界面相关的额外对象。

通过查看 line 44, you can see that the building operation with browserify will instead bundle "eslint.js" and its dependencies, without including anything else (the CLI part, that is). This bundling is also triggered by the test command 中的 "Makefile.js",它被包中的 "test" 脚本调用。

简而言之,这两个模块是不同的,即使它们由相同的包组成。这导致 console.log.

的不同输出