You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中require()引入模块时带{}与不带{}的语法区别

两种require模块引入写法的差异与适用场景

两种写法都是Node.js CommonJS模块规范下的合法引入方式,核心区别来自ES6解构赋值语法的结合使用,选择哪种写法完全由模块的导出结构和你的实际使用需求决定。


整体导入写法:const <variable> = require('moduleName')

  • 核心作用:将require()返回的模块导出内容完整赋值给左侧变量,拿到模块的全部导出能力
  • 适用场景:
    • 模块本身导出的是单个函数、类或者完整的功能对象,没有拆分提取的必要,比如示例中的nodemailer包,默认导出的就是完整的邮件服务核心对象,直接引入后即可调用createTransport等所有内置方法
    • 业务代码中需要用到模块导出的大量属性、方法,整体引入后通过点操作符访问,比逐个解构的写法更简洁
  • 示例对应写法:
// 完整引入nodemailer模块,所有导出能力都挂载在nodemailer变量上
const nodemailer = require("nodemailer");
// 调用时直接通过点操作访问对应方法
const transporter = nodemailer.createTransport({
  // 邮件服务配置
})

解构导入写法:const {<variable>} = require('moduleName')

  • 核心作用:从模块导出的对象中,直接提取指定名称的属性/方法,赋值给同名变量,本质是普通的ES6解构赋值,和以下写法完全等价:
const googleapisModule = require('googleapis');
const google = googleapisModule.google;
  • 适用场景:
    • 只需要用到模块导出对象里的某一个或少数几个属性、方法,不需要加载整个模块对象,解构后可以直接通过变量名调用,省略冗长的链式点操作
    • 支持多层嵌套解构,比如示例中的const {OAuth2} = google.auth,就是直接从google.auth对象中提取OAuth2类,后续可以直接写new OAuth2(),不用写完整的new google.auth.OAuth2()
  • 注意事项:
    • 只有模块导出内容是对象时才能使用解构写法,如果模块导出的是单个函数、类或者字符串、数字这类基本类型值,解构拿到的值会是undefined
    • 如果解构的属性名在模块导出中不存在,对应变量值为undefined,导入阶段不会抛错,只有运行时调用该变量时才会触发错误
  • 示例对应写法:
// 从googleapis的导出对象中直接提取google属性,不需要持有整个googleapis模块对象
const {google} = require('googleapis');
// 进一步从google.auth中解构出OAuth2类,简化后续调用
const {OAuth2} = google.auth;

// 后续直接使用解构出来的变量即可
const oauth2Client = new OAuth2(
  // 认证参数配置
)

两种写法没有本质的性能差异,只是语法便捷度的区别:需要使用模块的完整能力就选整体导入,只需要模块内部分零散的属性/方法就选解构导入即可。

内容的提问来源于stack exchange,提问作者sabari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 03:03:22