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

require()在JavaScript中如何工作,以及它的使用如何影响console.log?,javascript,node.js,require,console.log,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: [F

有人能解释一下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代码的巨大文件(超过32000行)。准确地说,我的情况是埃斯林

为什么它只在控制台中打印这些结果?在上面列出的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
将返回对模块放入其
exports
属性中的任何内容的引用

您的意思是,该文件包含的函数比使用
console.log
打印对象时看到的函数多得多。文件中函数的数量无关紧要。重要的是
导出

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


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

require
在节点中通过其包名对库进行加密时,将加载“main”脚本,根据package.json,该脚本为。此脚本将加载linter和一些与命令行界面相关的额外对象

通过查看中的“Makefile.js”,您可以看到使用browserify的构建操作将绑定“eslint.js”及其依赖项,而不包括任何其他内容(即CLI部分)。此绑定由包中的“测试”脚本调用


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

的不同输出,即“somefile.js”和
eslint的主脚本可能具有不同版本的eslint。你能检查一下吗?@E_net4我只是在这里截取的代码中对文件进行了不同的命名。当然,两者都是ESLint的最新版本。实际上,第一个示例中的eslint文件是0.20.0。这就是为什么我决定问require到底是如何影响console.log的。我想我只是不明白。只是另一个澄清:你从哪里得到的第一份文件?您是在浏览器中还是在Node.js中运行它?@E_net4 from Node.js。为了得到一个新版本,我输入npm安装,然后进行eslint测试。之后,将使用最新版本的ESLint创建一个新的构建文件夹,我想是这样的。我的回答有望完全涵盖您的问题。也许您应该重点回答
require
如何不影响
console.log()
,以及为什么该操作似乎要打印不同的对象。