关于node.js:NodeJS模块化

47次阅读

共计 1981 个字符,预计需要花费 5 分钟才能阅读完成。

NodeJS 遵循 commonJs 的语法标准

  • 引入:require()
  • 导出:module.exports 或者 exports

Node 中的模块化

  • 在 Node 中,一个 JS 就是一个模块
  • 在 Node 中,每一个 JS 文件的 js 代码都是独立运行在一个函数中,而不是全局作用域

    • 怎么证实是一个函数呢?咱们能够输入只有函数有的:console.log(arguments)
    • 当咱们输入 console.log(arguments.callee + ''), 就会发现,输入的是一个函数。(arguments.callee 保留的就是以后的函数)
    • 这个函数就长这样:

      // exports:该对象用来将变量或者喊出裸露到内部
      // require:函数,用来引入内部模块
      // module:module 代表的是以后的模块自身,exports 就是 module 的一个属性。所以咱们即能够应用 exports 导出也能够应用 module.exports 导出
      // __filename:以后文件的一个残缺门路
      // __dirname:以后文件所在的文件夹的门路
      function (exports, require, module, __filename, __dirname) {
      // 我在 01_module.js 输入的,显示的就是我以后 js 文件这个函数
      const md = require('./02_module')
      
      console.log(md.name)
      console.log(md.num)
      console.log(md.sayHi())
      console.log(arguments.callee + '')
      }
  • 在 Node 中,一个模块中的变量和函数在其余函数中无奈间接拜访。咱们能够通过 exports 或者 module.exports 向内部裸露变量和办法
  • 在 Node 中,通过 require()函数来引入内部模块

    • require()能够传递一个文件的门路作为参数,Node 将会主动依据该门路来引入内部模块
    • 留神的是,这里的门路,如果应用相对路径,必须以./ 或者../ 结尾,不能省略。
    • 应用 require()引入模块后,该函数返回一个对象,这个对象代表的就是引入的模块

简略说下 module.exports 和 exports 区别

  • 其实 exports = module.exports。
  • exports 只能应用 . 的模式向里面裸露外部的变量

    • exports.x = xxx
  • module.exports 既能够通过 . 的模式,也能够应用间接赋值

    • mudule.exports.x = xxx
    • module.exports = {}
  • 为什么 exports 不能应用间接赋值呢?这波及到数据的类型和内存(数据寄存地位)

    • 数据的类型分为值类型和援用类型,值类型又叫根本数据类型或者简略数据类型,援用类型又叫简单数据类型
    • 内存分为站内存和堆内存。
    • 咱们的值类型是间接放在栈内存中,每个数据之间互相独立。
    • 援用类型的数据是放在堆内存中的,然而它有个寄存地址,这个地址是放在栈内存中的。

      // 值数据类型,变量 a 寄存在栈内存中,值为 100
      var a = 100
      // 援用数据类型, 变量 b 寄存在栈内存中,值是援用类型数据在堆内存中的地址,而援用尅性的数据自身寄存在堆内存中
      var b = {
          name: '景天',age: 18
      }
    • exports = module.exports, 原本 export 是指向 module 的 exports,然而如果咱们应用 exports = {},那么 export 的指向就扭转了,不再指向 module.exports。

NodeJS 模块中分成两大类

  • 外围模块

    • 由 Node 引擎提供的模块
    • 外围模块的标识就是名字
  • 文件模块

    • 由用户本人创立的模块
    • 文件模块的标识,就是文件的门路。

简略的 demo

// 01_module.js---- 引入
const md = require('./02_module')
const fs = require('fs')

console.log(md.name)
console.log(md.num)
console.log(md.sayHi())
// 02_module.js---- 导出
console.log(111111)

// exports 导出
exports.name = '模块 2 中的 A'
exports.num = 1000
exports.sayHi = function() {console.log(` 大家好 `)
}
// module.exports 导出形式 1
module.exports.name = '模块 2 中的 A'
module.exports.num = 1000
module.exports.sayHi = function() {console.log(` 大家好 `)
}
// module.exports 导出形式 2
module.exports = {
    name: '模块 2 中的 A',
    num: 1000,
    sayHi: function() {console.log(` 大家好 `)
    }
}

正文完
 0