返回

模块引入:require 与 import 的区别及演进

前端

引言

在 JavaScript 模块化编程中,requireimport 都是引入依赖模块的语法。然而,这两者之间存在一些关键区别,并且随着 JavaScript 模块规范的演进,它们的用法也在不断变化。本文将对 requireimport 的区别及其在 JavaScript 发展中的演进过程进行深入探讨。

CommonJS 规范与 require

CommonJS 是一个用于 JavaScript 模块化的规范,它起源于 2009 年,旨在解决 JavaScript 模块化编程中存在的问题,包括命名冲突、依赖管理和代码组织等。在 CommonJS 规范中,require 语法用于引入依赖模块。

require 语法的基本用法如下:

const module = require('module-name');

其中,module-name 是要引入的模块的名称。require 会返回一个模块对象,该对象包含模块导出的内容。

ECMAScript 模块与 import

ECMAScript 模块是 JavaScript 的一个模块化标准,它于 2015 年引入,旨在提供一种更简单、更一致的模块化语法。在 ECMAScript 模块中,import 语法用于引入依赖模块。

import 语法的基本用法如下:

import { exportedValue } from 'module-name';

其中,exportedValue 是要导入的模块导出的值,module-name 是要引入的模块的名称。import 语法允许你一次性导入多个模块的导出值,并且可以为导入的模块起别名。

requireimport 的主要区别

  1. 语法格式: require 语法使用 require() 函数,而 import 语法使用 import
  2. 模块导出: 在 CommonJS 规范中,模块的导出值通常通过 module.exports 对象来指定。而在 ECMAScript 模块中,模块的导出值通过 export 关键字来指定。
  3. 模块加载: 在 CommonJS 规范中,模块是同步加载的,这意味着 require 语法会在执行当前脚本之前加载依赖模块。而在 ECMAScript 模块中,模块是异步加载的,这意味着 import 语法不会阻塞当前脚本的执行。
  4. 作用域: 在 CommonJS 规范中,require 语法加载的模块的作用域是当前模块。而在 ECMAScript 模块中,import 语法加载的模块的作用域是全局的。

requireimport 的演进

随着 JavaScript 模块规范的演进,requireimport 的用法也在不断变化。

在 Node.js 中,最初只有 require 语法可用。然而,随着 ECMAScript 模块规范的引入,Node.js 也开始支持 import 语法。在 Node.js 14 中,import 语法被默认启用,并且建议使用 import 语法来引入依赖模块。

在浏览器中,import 语法一开始并不被支持。然而,随着 ECMAScript 模块规范的普及,浏览器也开始支持 import 语法。如今,所有主流浏览器都支持 import 语法。

结论

requireimport 是 JavaScript 模块化编程中常用的两种语法。它们之间存在一些关键区别,并且随着 JavaScript 模块规范的演进,它们的用法也在不断变化。在 Node.js 中,建议使用 import 语法来引入依赖模块。在浏览器中,import 语法也是推荐的语法。