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(` 大家好 `)
}
}