模块
在nodeJS中一个文件就是一个模块,这个模块本质就是一个函数
模块化
CommonJs exports(导出) require(导入)
es6 export(导出) import(导入)
AMD define(导出) require(导入)
模块的定义
module.exports,在module.exports对象上添加属性导出值
exports,在exports对象上添加属性导出值
exports对象和module.exports是同一个对象
exports对象添加属性来导出值
module.exports对象可以赋值一个对象导出值
导出的始终是module.exports指向的对象
模块引用
rquire("文件名"),执行对应的文件并返回该文件对象的module.exports对象
module.exports是什么
新建module_001.js
console.log(module);
node输出
Module {
id: '.',
exports: {},
parent: null,
filename: 'F:\\work\\layUiDemo\\server\\module_001.js',
loaded: false,
children: [],
paths:
[ 'F:\\work\\layUiDemo\\server\\node_modules',
'F:\\work\\layUiDemo\\node_modules',
'F:\\work\\node_modules',
'F:\\node_modules' ] }
可以看到module是一个对象,module里面有exports对象
那么module.exports 跟exports有什么关系呢?
修改module_001.js
console.log(module.exports === exports); //输出true 说明他们两个指向同一个对象
module.exports 与 exports 的区别
新建module_001.js 和 module_002.js
module_001.js
let str = 'Hello';
let obj = {
name:'tom',
age:'18'
};
let fn = ()=>{
console.log('fn.........')
}
module.exports.str=str;
exports.obj = obj;
exports.fn = fn;
module_002.js
const allObj = require('./module_001');
console.log(allObj)
输出
{ str: 'Hello',
obj: { name: 'tom', age: '18' },
fn: [Function: fn] }
前面我们说了module.exports 与exports 他们两个指向同一个对象
现在我们改变module_001.js
let str = 'Hello';
let obj = {
name:'tom',
age:'18'
};
let fn = ()=>{
console.log('fn.........')
}
exports = {
str,
obj,
fn
}
输出是空,我们把exports换成module.exports发现输出就正常了。其原因在于,一开始module.exports 与 exports指向同一个对象,当exports = {} 的时候 就改变了exports的指向。require() 方法返回的是module.exports