JavaScript中require和import有何区别详解

 更新时间:2025年08月13日 08:22:52   作者:o0向阳而生0o  
在真实工作中,估计import和require大家经常见到,如果做前端业务代码,那么import更是随处可见了,这篇文章主要介绍了JavaScript中require和import有何区别的相关资料,需要的朋友可以参考下

在 JavaScript 中,require 和 import 都是用于模块导入的语法,但它们属于不同的模块系统,具有显著的区别:

1. 模块系统不同

require

属于 CommonJS 模块系统(Node.js 默认使用)。
语法:const module = require(‘./module’)

  • 动态加载:在代码运行时同步加载模块。
  • 可以导入任何类型的文件(.js、.json 等)。
  • 模块导出是对象(module.exports 或 exports)。

import

属于 ES6 模块系统(ECMAScript 2015+ 标准)。
语法:import module from ‘./module.js’

  • 静态加载:在代码解析阶段(编译时)确定依赖关系。
  • 默认支持 .js、.mjs 或通过 package.json 的 “type”: “module” 标记的文件。
  • 模块导出是只读的静态绑定(导出值在编译时确定)。

2. 加载时机

require

  • 同步加载:模块在代码执行到 require 时才会加载,可能阻塞后续代码。
  • 支持条件导入(如 if (condition) { require(…) })。

import

  • 静态加载:模块依赖在代码解析阶段确定,无法动态导入(但可通过 import() 动态导入)。
  • 必须写在顶层作用域(不能在条件语句或函数内使用,除非用 import())。

3. 语法差异

require

const fs = require('fs'); // 导入整个模块
const { readFile } = require('fs'); // 解构导入

import

import fs from 'fs'; // 默认导入
import { readFile } from 'fs'; // 命名导入
import * as fs from 'fs'; // 导入所有命名导出
import fs from 'fs/promises'; // 导入子模块(路径需完整)

4. 动态导入

require

直接内联使用,无需额外语法。

import

通过 import() 函数实现动态导入(返回 Promise):

const module = await import('./module.js');

5. 顶层 this 行为

require

模块中的 this 指向 module.exports。

import

模块中的 this 是 undefined(严格模式)。

6. 使用环境

require

主要用于 Node.js 环境(传统项目),或通过 Babel/Webpack 转译的浏览器代码。

import

现代浏览器原生支持(需声明 type=“module”),Node.js 从 v12 开始也支持 ES 模块(需文件后缀 .mjs 或 package.json 配置)。

7. 缓存机制

require

模块首次加载后会被缓存,后续 require 直接读取缓存。

import

同样有缓存,但行为更严格(静态分析时确定依赖)。

如何选择?

  • Node.js 项目:传统项目用 require,现代项目可用 import(需配置 “type”: “module”)。
  • 浏览器项目:优先使用 import(配合打包工具如 Webpack/Rollup)。
  • 动态加载:require 更灵活,ES 模块用 import()。

如果需要兼容性,Babel/TypeScript 可以将 import 转译为 require。

附:import()函数适用场合

按需加载,如下 import 模块在事件监听函数中,只有用户点击了按钮,才会加载这个模块。

button.addEventListener('click', event => {
  import('./dialogBox.js')
  .then(dialogBox => {
    dialogBox.open();
  })
  .catch(error => {
    /* Error handling */
  })
});

条件加载,import() 可以放在 if/else 语句中,实现条件加载。

if (condition) {
  import('moduleA').then(...);
} else {
  import('moduleB').then(...);
}

总结

到此这篇关于JavaScript中require和import有何区别的文章就介绍到这了,更多相关js中require和import区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 属于你的jQuery提示框(Tip)插件

    属于你的jQuery提示框(Tip)插件

    这篇文章主要分享了一款属于你的jQuery提示框(Tip)插件,功能很强大,希望大家喜欢
    2016-01-01
  • Layui事件监听的实现(表单和数据表格)

    Layui事件监听的实现(表单和数据表格)

    这篇文章主要介绍了Layui事件监听的实现(表单和数据表格),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 检查表单元素的值是否为空的实例代码

    检查表单元素的值是否为空的实例代码

    这篇文章主要介绍了检查表单元素的值是否为空的实例代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • JS利用 clip-path 实现动态区域裁剪功能

    JS利用 clip-path 实现动态区域裁剪功能

    这篇文章主要介绍了JS利用 clip-path 实现动态区域裁剪功能,文中主要通过使用 box-shadow 实现,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • JavaScript 中的Set从基础到高级用法

    JavaScript 中的Set从基础到高级用法

    本文全面介绍了ES6中Set数据结构的特点与用法,文章详细讲解了Set的创建、增删查API、遍历方法,并与Array进行性能对比,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • javascript 应用小技巧方法汇总

    javascript 应用小技巧方法汇总

    这篇文章主要介绍了javascript 应用小技巧方法汇总的相关资料,需要的朋友可以参考下
    2015-07-07
  • Openlayers实现地图的基本操作

    Openlayers实现地图的基本操作

    这篇文章主要为大家详细介绍了Openlayers实现地图的基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • 关于TypeScript开发的6六个实用小技巧分享

    关于TypeScript开发的6六个实用小技巧分享

    TypeScript是Javascrip t超集,支持静态类型检测,可以在编译期提前暴露问题,节省debug时间,下面这篇文章主要给大家介绍了关于TypeScript开发的6六个实用小技巧,需要的朋友可以参考下
    2021-09-09
  • 提高网站信任度的技巧

    提高网站信任度的技巧

    网站信任度:一方面指浏览者对于站点的信任程度,另一方面指搜索引擎对于网站的信任值(TrustRank),网站信任度对于企业站点更为重要.在得到更高信任度的同时,流量更容易转化为实在的收入.
    2008-10-10
  • CocosCreator入门教程之用TS制作第一个游戏

    CocosCreator入门教程之用TS制作第一个游戏

    这篇文章主要介绍了CocosCreator入门教程之用TS制作第一个游戏,对TypeScript感兴趣的同学,一定要看一下
    2021-04-04

最新评论