0

AWS 的配置方式让我觉得很奇怪。您显然可以在一个文件中设置配置,然后您不必export配置 AWS 对象,您可以再次直接从节点模块导入它。我很难理解这是如何/为什么起作用的:

// config.js
const AWS = require('aws-sdk')
AWS.config.update({ region: 'us-east-2', signatureVersion: 'v4' })

然后在其他文件中,我可以像这样导入 AWS,并且配置神奇地坚持下去:

// some other js file
const AWS = require('aws-sdk') // look, I didn't import this from config.js!
const s3 = new AWS.S3() // it knows how to use the right region & signature!

为什么我不应该导出我配置的 AWS 并改为导入它?即使我没有从配置文件中导入配置,如何复制配置?

4

1 回答 1

2

如果您查看源代码,您可以看到该AWS对象具有已config初始化的属性。

这本质上是单例对象,它依赖于 Node.js中的模块缓存。

从 NodeJS 文档:

缓存

模块在第一次加载后被缓存。这意味着(除其他外)每次调用 require('foo') 都将返回完全相同的对象,如果它会解析为同一个文件。

如果 require.cache 没有被修改,多次调用 require('foo') 不会导致模块代码被多次执行。这是一个重要的特点。有了它,可以返回“部分完成”的对象,从而允许加载传递依赖项,即使它们会导致循环。

要让一个模块多次执行代码,导出一个函数,然后调用该函数。

于 2021-11-23T20:55:25.160 回答