当前位置: 首页 > ai >正文

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. 导出语法对应关系

CommonJSES Modules
module.exportsexport default
exports.xxxexport 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 生态中。

✅ 总结对比表

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

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

http://www.xdnf.cn/news/9519.html

相关文章:

  • zabbix6.x 监控mysql数据库
  • 【深度剖析】义齿定制行业数字化转型模式创新研究(上篇:行业概况)
  • Vulnhub_Zico2_wp
  • LNMP 架构部署
  • 《基于AIGC的智能化多栈开发新模式》研究报告重磅发布! ——AI重塑软件工程,多栈开发引领未来
  • 腾讯混元开源语音数字人模型 HunyuanVideo-Avatar:开启数字人 “能说会唱” 新时代
  • 上海AI Lab 提出ULTRAIF方法,通过两阶段过程合成高质量指令遵循数据集,代码与数据集完全开源!
  • 基于GA遗传优化的FIR滤波器幅频相频均衡补偿算法matlab仿真
  • 网页前端开发(基础进阶1)
  • KONG根据请求参数限流
  • 线代第四章线性方程组第四节:方程组解的结构
  • 使用java实现word转pdf,html以及rtf转word,pdf,html
  • DeepSeek实战:构建智能问答系统的完整指南
  • Android学习之定时任务
  • 【组件】翻牌器效果
  • More SQL(Focus Subqueries、Join)
  • 如何优化Elasticsearch的搜索性能?
  • 登高架设作业考试中常见的安全规范考点是什么?
  • DBeaver 连接 OceanBase Oracle 租户
  • react-native的token认证流程
  • AI觉醒前兆,ChatGPT o3模型存在抗拒关闭行为
  • 《吾心悔已》---李劭卓2025.5.28
  • 漫画Android:View是怎么绘制出来的?
  • MySQL数据库(一)
  • 华为OD机试真题——最佳的出牌方法(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • 嵌入式开发学习(第二阶段 C语言笔记)
  • 电缆护层保护器的优势
  • OpenWrt 插件安装失败的常见问题和解决方法
  • sglang 部署Qwen/Qwen2.5-VL-7B-Instruct
  • JavaScript 性能优化:从入门到实战