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寄存在栈内存中,值为100var 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 = 1000exports.sayHi = function() { console.log(`大家好`)}// module.exports导出形式1module.exports.name = '模块2中的A'module.exports.num = 1000module.exports.sayHi = function() { console.log(`大家好`)}// module.exports导出形式2module.exports = { name: '模块2中的A', num: 1000, sayHi: function() { console.log(`大家好`) }}