模塊
在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