我在require语句中有一个语法查询。请参考下面的示例代码。
const nodemailer = require("nodemailer");
const {google} =require('googleapis');
const {OAuth2}=google.auth;
有时,我看到示例代码使用
const {<variable>} = require('moduleName')
其他时候,我在
下面看到const <variable> = require('moduleName')
它们之间的区别是什么?提前感谢。
感谢开发者社区。
因此,当您想要进行对象解构以从导出的对象中获取属性并创建具有相同名称的模块级变量时,您可以在此上下文中使用{ }
。
:
const { google } = require('googleapis');
是它的快捷方式:
const __g = require('googleapis');
const google = __g.google;
因此,在此上下文中,仅当需要从导入模块中获取.google
属性时才使用{ google }
。
如果你想要像这样的整个模块句柄:
const nodemailer = require("nodemailer");
则不使用{ }
。对于任何给定的模块,要知道您想要哪个模块,唯一的方法是查阅该模块的文档、模块的代码或如何使用该模块的示例。这完全取决于模块导出的内容,以及您是想要顶层导出对象还是想要该对象的属性。
重要的是要认识到require()
所使用的{ }
并不是与require()
相关联的特殊语法。这是正常的对象解构赋值,就像你这样做:
// define some object
const x = { greeting: "hello" };
// use object destructuring assignment to create a new variable
// that contains the property of an existing object
const { greeting } = x;
console.log(greeting); // "hello
当您使用{}导入函数时,这意味着您只导入了包中可用的一个函数。也许你见过:
const {googleApi, googleAir, googleWater} = require("googleapis")
但是,当您不使用{}时,这意味着您要导入整个包,只需写入:
const google = require("googleapis")
假设你在代码中需要googleApi。你可以把它命名为:
google.googleApi