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(`大家好`)
}
}
发表回复