”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript 中的 require 与 import

JavaScript 中的 require 与 import

发布于2024-11-07
浏览:774

require Vs import In JavaScript

我记得当我开始编码时,我会看到一些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。此版本提供了使用导入和导出语句异步导入模块的功能。这意味着您正在运行的脚本可以在加载模块时继续执行,因此不存在瓶颈。这也实现了一种称为“树摇动”的效率,我将在后面的文章中介绍这一点,但基本上,这意味着您只从正在使用的模块加载 JavaScript,并且不会加载死代码(未使用的代码)进入浏览器。这一切都是可能的,因为 ES6 支持静态和动态导入。

这是之前的相同示例,但这次我们使用导入和导出。

// 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 更好?

正如我们之前提到的,导入是异步的,这可以带来更好的性能,特别是在大型应用程序中。此外,由于可以静态分析导入,因此 linter 和捆绑器等工具可以更有效地优化代码并实现树摇动,从而缩小捆绑包大小并加快加载时间。语法也比 require() 更容易阅读,这可以带来更好的开发人员体验,我们都希望如此!

什么时候使用 require 和 import

你会在以下情况下使用 require():

  • 您正在开发一个旧版 Node.js 项目,该项目在 ES6 发布之前就已启动且尚未更新。

  • 您需要在运行时动态加载模块,例如在配置文件中,或者如果您需要有条件地加载模块。

您会在以下情况下使用导入:

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

概括

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

如果您发现本文有帮助,请订阅我的时事通讯,我将每周将更多类似内容直接发送到您的收件箱!

版本声明 本文转载于:https://dev.to/travislramos/require-vs-import-in-javascript-1ah4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-05-17
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-05-17
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-05-17
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-05-17
  • \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    \“(1)vs.(;;):编译器优化是否消除了性能差异?\”
    答案: 在大多数现代编译器中,while(1)和(1)和(;;)之间没有性能差异。编译器: perl: 1 输入 - > 2 2 NextState(Main 2 -E:1)V-> 3 9 Leaveloop VK/2-> A 3 toterloop(next-> 8 last-> 9 ...
    编程 发布于2025-05-17
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-05-17
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中可能会遇到一个冲突,其中3派对软件包将另一个带有导入套件的path package the Imptioned package the Imptioned package the Imported tocted pac...
    编程 发布于2025-05-17
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-05-17
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-05-17
  • 如何使用PHP从XML文件中有效地检索属性值?
    如何使用PHP从XML文件中有效地检索属性值?
    从php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    编程 发布于2025-05-17
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-17
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制,控制元素的滚动行为对于确保用户体验和可访问性是必不可少的。一种这样的方案涉及限制动态大小的父元素中元素的滚动范围。问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期...
    编程 发布于2025-05-17
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-05-17
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-05-17
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-05-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3