1、module.exports
module变量代表当前模块,这个变量是一个对象。module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象:
module.exports = {};
例子:app.js
module.exports.name = '我是电脑';
module.exports.say = () => {
console.log('这是一个函数');
}
// 上边这段代码就相当于一个对象
{
name: '我是电脑',
say: () => {
console.log('这是一个函数');
}
}
require方法用于加载模块
let req = require('./app.js');
req.name
req.say()
2、exports 与 module.exports的关系
Node为每个模块提供一个exports变量,指向module.exports。可以通俗的理解为:
let exports = module.exports;
// module.exports可以直接导出一个匿名函数或者一个值
module.exports = () => {
let a = 'Hello World';
return a;
}
// 但是exports是不可以的,因为这样等于切断了exports与module.exports的联系
// 错误的写法
exports = () => {
let a = 'Hello World';
return a;
}
3、export 和 export default的区别
export是es6引出的语法,用于导出模块中的变量,对象,函数,类。对应的导入关键字是import
例子:app.js
export const firstName = 'Michael';
export const lastName = 'Jackson';
export const year = 1958;
export const say = () => {
console.log('Hello World');
};
export命令对外部输出了三个变量,还可以这样写(推荐写法)
const firstName = 'Michael';
const lastName = 'Jackson';
const year = 1958;
const say = () => {
console.log('Hello World');
};
export { firstName, lastName, year, say };
如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名
import { lastName as newName } from './app.js';
使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。使用export default命令,为模块指定默认输出,不知道变量名或者函数名也可以使用import加载
例子:app-default.js
const func = () => {
console.log('Hello World');
}
export default func;
加载该模块时,import命令可以为该匿名函数指定任意名字
import customName from './app-default';
export default就是输出一个叫做default的变量或方法,然后系统允许你为它取任意名字
// modules.js
const add = (x, y) => {
return x + y;
}
export { add as default };
// 等同于
// export default add;
// app.js
import { default as foo } from './modules';
// 等同于
// import foo from './modules';