JavaScript 中,require 和 import

在 JavaScript 中,requireimport 都是用来导入模块的语法,但它们属于不同的模块系统:CommonJS 和 ECMAScript Modules(ESM)。下面是它们之间的主要区别:


✅ 1. 模块系统不同

  • require: 是 CommonJS 的语法,主要用于 Node.js 环境。
  • import: 是 ES6 (ECMAScript 2015) 引入的标准模块系统,广泛用于现代前端框架(如 React、Vue)和现代浏览器。

✅ 2. 加载方式不同

  • require运行时同步加载 模块:

    const fs = require('fs'); // 同步加载
    
  • import编译时异步加载 模块(静态导入):

    import fs from 'fs'; // 编译时处理
    

⚠️ 注意:import 也可以使用动态导入(import())实现异步加载,返回一个 Promise:

import('fs').then(fs => {
  // 使用 fs
});

✅ 3. 导出语法对应关系

CommonJS ES Modules
module.exports export default
exports.xxx export const xxx
require() import ... from ...

✅ 4. 使用环境不同

语法 Node.js 支持情况 浏览器支持情况
require 默认支持(旧版本) 不支持(需打包工具)
import 需设置 "type": "module" 支持(现代浏览器)

✅ 5. 示例对比

文件结构:

math.js
main.js

math.js 内容:

// CommonJS
exports.add = (a, b) => a + b;
module.exports = { add };

// ES Module
export const add = (a, b) => a + b;
export default { add };

main.js 对比:

使用 require:
const math = require('./math');
console.log(math.add(2, 3));
使用 import:
import { add } from './math';
console.log(add(2, 3));

// 或者导入默认导出
import math from './math';
console.log(math.add(2, 3));

✅ 6. 兼容性与趋势

  • Node.js 从 v12 开始支持 ESM,但需要设置 "type": "module" 或使用 .mjs 扩展名。
  • 前端开发推荐使用 import,它是未来的标准。
  • require 仍然在很多老项目中使用,尤其是在 Node.js 生态中。

✅ 总结对比表

特点 require import
模块系统 CommonJS ES Modules (ES6+)
加载时机 运行时同步 编译时(静态)
是否支持异步 ❌ 不支持 ✅ 支持 (import())
默认导出/具名导出 ✅ 支持(需手动设置) ✅ 天然支持
推荐使用场景 老版 Node.js 项目 现代前端/Node.js ESM 项目

如果你是在写现代项目(如 Vue、React、TypeScript),建议使用 import;如果是维护旧的 Node.js 项目,则可能继续用 require

你可能感兴趣的:(javascript,开发语言,ecmascript)