require 是 Node.js 标准 CommonJS 模块规范,mei.js 导出、zi.js require 读取,一共4 种常用导出导入方式,下面完整示例。
前置文件结构
├── mei.js // 导出文件
└── zi.js // 导入文件
方式 1:导出单个变量 / 值 module.exports = 变量(最常用)
mei.js
const name = "小明";
// 直接赋值导出单个内容
module.exports = name;
zi.js 引入
// 直接接收导出的值
const data = require("./mei.js");
console.log(data); // 小明
方式 2:导出对象(多数据打包,日常开发最多)
mei.js
const username = "小红";
const age = 18;
// 导出对象,多个数据放一起
module.exports = {
username,
age,
sayHi: () => "你好"
};
zi.js 两种接收写法
// 写法1:完整接收对象
const meiData = require("./mei.js");
console.log(meiData.username, meiData.age);
// 写法2:解构赋值(推荐)
const { username, age, sayHi } = require("./mei.js");
console.log(username);
方式 3:分批挂载导出 exports.xxx = xxx
exports 是 module.exports 的引用,批量追加属性,不能直接 exports = {}(会断引用)
mei.js
// 逐个挂载
exports.title = "标题";
exports.getNum = () => 666;
exports.list = [1,2,3];
zi.js 使用(同方式 2)
const m = require("./mei.js");
console.log(m.title, m.getNum());
方式 4:导出函数 / 类
mei.js 导出函数
// 导出单个函数
module.exports = function add(a,b) {
return a + b;
}
zi.js
const add = require("./mei.js");
console.log(add(1,2)); // 3
mei.js 导出类
class User {
constructor(name) {
this.name = name;
}
}
module.exports = User;
zi.js
const User = require("./mei.js");
const u = new User("张三");
补充:易错区分 exports /module.exports
exports.xxx = val 等价于 module.exports.xxx = val
exports = {} 无效,会切断和 module.exports 的指向,外部 require 拿不到
- 同一文件同时写两种:以最后一次 module.exports 覆盖全部
// mei.js 示例覆盖
exports.a = 1;
module.exports = { b: 2 }; // 最终导出只有 {b:2},a 丢失
总结四种导出场景(对应 require 引入)
module.exports = 单值:导出字符串、数字、数组、函数、类
module.exports = {key:val}:一次性导出多数据对象
exports.属性 = 值:分批追加导出多个属性
- 混合导出(函数 + 变量打包对象),本质属于方式 2