-2

如果导出是节点模块对象中的对象,为什么它在终端中不显示为对象(Windows 10 中的命令提示符)?

这是 Name.js 模块中的代码:

    module.exports ="Hello World"; 
    console.log(module);

我在 ternianl 看到的是这样的:

Module {
  id: '.',
  path: 'D:\\Projects\\Node\\Tutorial',
  exports: 'Hello World',
  parent: null,
  filename: 'D:\\Projects\\Node\\Tutorial\\names.js',
  loaded: false,
  children: [],
  paths: [
    'D:\\Projects\\Node\\Tutorial\\node_modules',
    'D:\\Projects\\Node\\node_modules',
    'D:\\Projects\\node_modules',
    'D:\\node_modules'
  ]
}

如您所见,exportsexports: 'Hello World'不是一个对象,而是一个字符串。

4

2 回答 2

2

您用module.exports字符串替换了该对象,因此当您记录它时,您只会看到该字符串,因为该对象已经消失了。所以,这个任务:

module.exports ="Hello World"; 

获取对象exports属性中的module对象并将其替换为字符串。所以,现在当你登录时module.exports,你只会看到你替换它的字符串。

也许您打算执行以下操作:

module.exports.greeting = "Hello World"; 

您将对象留在原处并向其添加属性。

这只是普通的 Javascript,所以exports只是module对象的一个​​属性。如果您为该属性分配其他内容,那么它将用您分配给它的任何内容替换先前的对象。


这在概念上几乎相同:

let myexports = { name: "Hi I'm an object" };
console.log(myexports);

myexports = "Hi I'm a string";    // replace object with a string
console.log(myexports);

在任何一种情况下,您都将一个字符串分配给一个变量/属性,并用该字符串替换之前的对象。

于 2021-09-01T20:34:22.157 回答
1

从技术上讲,模块是一个在日志中可见的对象。

当您将其导入另一个文件时,它将提供您导出的数据,即“Hello World”字符串。

虽然导出的值可以是字符串、数字等,但 module.exports 仍然是一个对象。

有关 module.exports 和要求的详细解释/理解,请阅读https://stackify.com/node-js-module-exports/

于 2021-09-01T20:25:16.327 回答