JavaScript 中的 require 与 import

108 阅读3分钟

我记得当我开始编码时,我会看到一些 js 文件使用require()来导入模块,而其他文件使用import。这总是让我感到困惑,因为我真的不明白有什么区别,或者为什么项目之间存在不一致。如果你也有同样的疑问,请继续阅读!

什么是 CommonJS?

CommonJS 是一组用于在服务器端 JavaScript(主要是 Node.js 环境)中实现模块的标准。在此系统中,模块是同步加载的,这意味着脚本执行被阻止,直到模块加载完成。这是一种简单的方法,但缺点是如果您尝试加载一堆不同的模块,性能就会受到影响,因为必须先一个接一个地加载它们,然后其他任何模块才能运行。 当使用 CommonJS 时,您可以使用 module.exports 来导出功能并使用require()来导入它。 下面是代码示例。

// In file multiple.js

module.exports = function multiply(x, y) {
    return x * y;
};
// In file main.js

const multiply = require(‘./multiply.js’);

console.log(multiply(5, 4)); // Output: 20

什么是 ECMAScript (ES6)?

ES6,也称为 ECMAScript,是 2015 年发布的较新版本的 JavaScript。此版本提供了使用importandexport语句异步导入模块的功能。这意味着您正在运行的脚本可以在加载模块时继续执行,因此不会出现瓶颈。这还允许实现一种称为 tree-shaking 的效率,我将在以后的文章中介绍,但基本上,这意味着您只从您正在使用的模块加载 JavaScript,而死代码(未使用的代码)不会加载到浏览器中。这一切都是可能的,因为 ES6 支持静态和动态导入。

这是之前的相同示例,但这次我们使用的是importexport

// In file multiply.js

export const multiply = (x, y) => x * y;
// In file main.js

import { multiply } from ‘./multiply.js’;

console.log(multiply(5, 4)); // Output: 20

主要区别:require 和 import

require()是 CommonJS 模块系统的一部分,而import是 ES6 模块系统的一部分。您将看到它require()在 Node.js 环境中用于服务器端开发,主要是尚未采用 ES6 的旧项目。您将看到它import在服务器端和前端开发中都有使用,尤其是较新的项目以及任何前端框架,如 React 或 Vue。

为什么 import 比 require 更好?

正如我们前面提到的,import它是异步的,这可以带来更好的性能,尤其是在大型应用程序中。此外,由于import可以进行静态分析,linters 和 bundlers 等工具可以更有效地优化代码并实现 tree shake,从而减小包大小并加快加载时间。语法也更易于阅读,从而带来require()更好的开发人员体验,而我们都希望如此!

何时使用 require 和 import

您可以require()在以下情况下使用:

  • 您正在处理一个在 ES6 发布之前启动且尚未更新的旧式 Node.js 项目。
  • 您需要在运行时动态加载模块,例如在配置文件中,或者您需要有条件地加载模块。

您可以import在以下情况下使用:

  • 任何其他时间,因为这是现在的标准并且更有效率。

概括

一般情况下,建议import尽可能使用它,因为它提供了更多好处,并且是较新、更广泛采用的模块系统。但是,在某些情况下,它仍然require()是更好的选择,具体取决于您的特定要求和工作环境。

智答专家

如果您在学习或使用 JavaScript 过程中遇到任何疑问,或者想要了解更多的编程知识,智答专家可以帮助您解决各种技术难题。无论是 CommonJS 还是 ES6,或者是其他编程语言和技术栈,智答专家都能为您提供专业指导和支持。访问智答专家,开启您的高效编程之旅!