JavaScript 模块化
ES6 模块规范(ESM)
单个导出
// 导出
export let name1 = 'zhangsan';
export let name2 = 'lisi';
// 导入
import { name1, name2 } from './test.js';
批量导出
// 导出
let name1 = 'zhangsan';
let name2 = 'lisi';
let name3 = 'wangwu';
export { name1, name2, name3 };
// 导入
import { name1, name2, name3 } from './test.js';
别名导出与整体导入
导出时可以用 as 重命名,导入时用 * as 整体引入:
// 导出时取别名
let name1 = 'zhangsan';
let name2 = 'lisi';
let name3 = 'wangwu';
export { name1 as n1, name2 as n2, name3 as n3 };
// 导入全部(通过命名空间对象访问)
import * as name from './test.js';
console.log(name.n1); // 'zhangsan'
console.log(name.n2); // 'lisi'
默认导出
一个模块只能有一个默认导出,导入时可以使用任意名称:
// 导出(函数)
export default function () {
console.log('默认导出');
}
// 导入
import func from './test.mjs';
func();
// 导出(对象)
export default {
func() {
console.log('默认导出');
},
name: 'zhangsan',
age: 22,
};
// 导入
import obj from './a.mjs';
obj.func();
console.log(obj.name);
console.log(obj.age);
CommonJS 规范(CJS)
CommonJS 是 Node.js 默认的模块规范,使用 module.exports 导出、require 导入:
// 导出
module.exports.name = 'zhangsan';
module.exports.age = 18;
module.exports.func = function () {
console.log('CommonJS 规范');
};
// 导入(对象形式)
const obj = require('./a');
console.log(obj.name);
console.log(obj.age);
obj.func();
// 导入(解构形式)
const { name, age, func } = require('./a');
console.log(name);
console.log(age);
func();