【问题标题】:Which format is each module in in Node.js?Node.js 中每个模块的格式是什么?
【发布时间】:2019-07-25 01:27:13
【问题描述】:

在 Node.js 中,每个模块都采用具有以下属性的对象格式:

Module {
  id: '.',
  exports: {},
  parent: null,
  filename: 'C:\\Users\\Node\\first-app\\app.js',
  loaded: false,
  children: [],
  paths:
   [ 'C:\\Users\\app\\node_modules',
     'C:\\Users\\\\Node\\node_modules',
     'C:\\Users\\node_modules',
     'C:\\Users\\Documents\\node_modules',
     'C:\\Users\\node_modules',
     'C:\\Users\\node_modules',
     'C:\\node_modules' ] }

但是,每个模块也是这样的函数格式:

(function (exports, require, module, __filename, __dirname) { 
//content of the function
})

函数将 export、require、module、__filename 和 __dirname 作为其参数。前者是键/值格式,后者是函数定义格式。是哪一个?

【问题讨论】:

  • "每个模块也是函数格式" - 嗯,不是吗?这只是一个初始化模块对象的 IIFE,仅此而已。该函数没有保留,它不代表模块。
  • 我觉得函数总是存在的,因为只要出现语法错误,就会调用 Function.Module._load 和 Function.Module.runMain 之类的函数,不是吗?
  • 该函数在模块加载时创建一次,然后调用它来评估模块源,但随后被丢弃。模块仅引用模块对象。

标签: javascript node.js oop object


【解决方案1】:

您的代码示例是两个不同但相关的东西。第一个是模块对象,描述为here。第二个是节点在内部执行的操作:将模块包装在匿名函数中,这有助于将模块中的顶级变量保持在该模块的范围内,而不是全局公开它们。此模块包装行为描述为here

【讨论】:

    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 2018-12-09
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2021-06-01
    • 2016-06-27
    相关资源
    最近更新 更多