MST

星途 面试题库

面试题:JavaScript中ES6模块与CommonJS模块在导入导出语法上有何区别

请分别阐述ES6模块和CommonJS模块导入导出的基本语法,并举例说明它们在默认导出、命名导出等方面的不同。
34.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

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.exportsexports 整体导出,没有专门的默认导出概念,导入时名称取决于导出的赋值。
  • 命名导出
    • ES6模块使用 export const/function... 或先定义后 export { } 进行命名导出,导入时用 {} 解构获取。
    • CommonJS模块通过给 exports 对象添加属性或 module.exports 以对象形式包含多个属性实现类似命名导出,导入时需通过对象属性访问。