ES6模块
- 导入语法:
- 默认导入:
import defaultExport from 'module-name';
,例如import React from 'react';
- 命名导入:
import { export1, export2 } from 'module-name';
,例如import { useState, useEffect } from'react';
- 混合导入:
import defaultExport, { export1, export2 } from'module-name';
,例如import React, { useState } from'react';
- 导出语法:
- 默认导出:
export default expression;
,例如:
// utils.js
const add = (a, b) => a + b;
export default add;
- **命名导出**:`export const name1 = expression;` 或先定义后 `export { name1, name2 };`,例如:
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
CommonJS模块
- 导入语法:
const module = require('module-name');
,例如const express = require('express');
如果是获取命名导出,需通过对象属性访问,如:
const { add, subtract } = require('./math.js');
- 导出语法:
- 导出单个值:
module.exports = value;
或 exports = value;
(注意后者重新赋值时可能有问题),例如:
// utils.js
const add = (a, b) => a + b;
module.exports = add;
- **导出多个值**:`exports.name1 = value1; exports.name2 = value2;` 或 `module.exports = { name1: value1, name2: value2 };`,例如:
// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
exports.add = add;
exports.subtract = subtract;
不同点
- 默认导出:
- ES6模块使用
export default
明确指定默认导出,导入时可自定义名称。
- CommonJS模块通过
module.exports
或 exports
整体导出,没有专门的默认导出概念,导入时名称取决于导出的赋值。
- 命名导出:
- ES6模块使用
export const/function...
或先定义后 export { }
进行命名导出,导入时用 {}
解构获取。
- CommonJS模块通过给
exports
对象添加属性或 module.exports
以对象形式包含多个属性实现类似命名导出,导入时需通过对象属性访问。