【悄咪咪学Node.js】6. require/import 模块化

💡 原文中文,约5900字,阅读约需14分钟。
📝

内容提要

本文介绍了模块化编程的概念和优势,以及两种主流的模块化方案:require/exports和import/export。require/exports是Node.js支持的一种模块化方案,而import/export是ES6提出的规范。文章详细介绍了require/exports和import/export的使用方法和区别,以及它们在代码调用、工作机制和性能方面的差异。最后总结了本文的重点内容。

🔎

延伸解读

exports 与 module.exports 的引用关系

文章通过代码示例说明,exports 是 module.exports 的引用,初始指向同一内存地址。若重新定义 module.exports,会创建新对象,导致 exports 失效,之前通过 exports 导出的内容也会丢失。因此建议不要重新定义 module.exports,以避免引用丢失问题。

动态加载与静态加载的差异

require 是运行时动态加载,可在代码任意位置调用;import 是编译时静态加载,必须在文件开头引入,否则编译报错。但 import 提供了 import() 函数支持动态加载,返回 Promise。这种差异影响了代码的灵活性和错误检测时机。

性能与工作机制对比

require 加载整个模块后再提取所需函数,而 import 通过解构只加载指定函数,因此 import 性能更优。但 import/export 在 Node.js 中仍处于试验阶段,需使用 .mjs 后缀,且未来可能变化。

❓

Q&A

什么是模块化编程,它有什么优势?

模块化编程是将特定功能的代码分解为独立模块的过程。其优势包括有利于规划、提高开发效率、便于问题排查、易于维护和可复用。

require/exports和import/export有什么区别?

require/exports是Node.js支持的模块化方案,采用CommonJS规范,支持动态加载;而import/export是ES6提出的规范,支持静态加载,性能优于require/exports。

如何使用require和exports进行模块化?

使用require引入模块,例如:const fs = require('fs'); 使用exports导出模块,例如:exports.exportFn = function() { console.log('this is the export function'); };

import/export的使用方法是什么?

使用import引入模块,例如:import fs from 'fs'; 导出默认模块使用export default,导出命名模块使用export function fn() {}。

为什么建议使用module.exports而不是exports?

因为重新定义module.exports会导致exports失效,建议使用module.exports作为导出模块的标准。

动态加载和静态加载的区别是什么?

动态加载是指在运行时调用模块(如require),而静态加载是在编译时引入模块(如import),后者在性能上通常更优。

🏷️

标签

➡️

继续阅读