require和import的区别

require和import的区别

在 JavaScript 中,requireimport 都用于模块导入,但存在以下关键区别:

1. 语法规范
  • requireCommonJS 规范 的实现,主要用于 Node.js 环境。
    示例:
    const fs = require('fs');
    

  • importES6 模块规范(ECMAScript Modules)的标准语法,适用于现代浏览器和 Node.js(需配置)。
    示例:
    import fs from 'fs';
    

2. 加载机制
  • require运行时加载
    模块在代码执行到该语句时才被加载,并返回整个模块对象。
    if (condition) {
      const module = require('./module'); // 动态加载
    }
    

  • import静态加载
    模块在代码编译阶段解析,必须位于模块顶层(不能嵌套在条件语句中)。
    import module from './module'; // 必须全局作用域
    // 动态加载需用 import()
    if (condition) {
      import('./module').then(module => {...});
    }
    

3. 模块导出/导入方式
  • require 支持 动态解构
    可选择性获取模块的部分内容。
    const { funcA } = require('./module');
    

  • import 提供更灵活的导入方式:
    • 默认导入:import defaultExport from 'module'
    • 命名导入:import { exportA } from 'module'
    • 重命名:import { exportA as alias } from 'module'
    • 整体导入:import * as module from 'module'
4. 输出特性
  • CommonJS (require)
    导出的是模块的 值拷贝(基本类型为复制,引用类型为共享地址)。
    修改模块内部变量不影响已导入的值。
  • ES6 模块 (import)
    导出的是 值的引用(即动态绑定)。
    模块内部变量变化会同步影响导入结果。
5. 执行顺序
  • require同步加载
    阻塞后续代码执行,直到模块加载完成。
  • import异步加载
    在编译阶段处理依赖,运行时无阻塞(通过 import() 动态加载时返回 Promise)。
6. 应用场景
  • require:Node.js 传统项目、旧版浏览器(需 Babel 等工具转译)。
  • import:现代前端框架(React/Vue)、浏览器原生支持的环境、Node.js(需 package.json 设置 "type": "module")。

总结对比表

特性require (CommonJS)import (ES6 Modules)
规范CommonJSECMAScript
加载时机运行时动态加载编译时静态解析
作用域可嵌套在代码块中必须位于模块顶层
输出类型值拷贝值引用(动态绑定)
同步/异步同步加载静态导入同步,动态导入异步
适用环境Node.js 传统环境现代浏览器、Node.js(需配置)

建议

  • 新项目优先使用 import(ES6 标准)。
  • 旧项目或 Node.js 特定场景可沿用 require
  • 混合使用时需通过工具(如 Webpack/Babel)统一模块规范。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值