Je to správný způsob, jak používat AWS global config v JavaScript SDK?

0

Otázka

Způsob, jakým AWS dostane nakonfigurován tak mi přijde opravdu divné. Očividně můžete nastavit config v jednom souboru, a pak nemusíš export nakonfigurované AWS objektu, stačí jej importovat přímo z node moduly znovu. Mám těžké pochopit, jak/proč to funguje:

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

Pak v nějakém jiném souboru, mohu jen import AWS, jako je tento, a config magicky hole s to:

// 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!

Proč bych neměl export AWS, že jsem nakonfigurován a import, které místo? Jak je konfigurační převzata i když nejsem import z mého config?

1

Nejlepší odpověď

2

Pokud se podíváte na zdrojový kód můžete vidět, že AWS objekt má config vlastnost, která je inicializována.

To je v podstatě singleton objekt, to se spoléhá na modul mezipaměti v Node.js.

Z NodeJS docs:

Ukládání do mezipaměti

Moduly jsou uloženy v mezipaměti po prvním oni jsou načteny. To znamená, (mimo jiné), že každé volání require('foo'), bude mít přesně stejný objekt vrátil, pokud by to vyřešit, aby stejné soubor.

Za předpokladu požadovat.cache není upravené, více volání require('foo') nezpůsobí modul kód, který bude proveden více krát. To je důležitá vlastnost. S tím "částečně hotovo" objekty mohou být vráceny, což umožňuje tranzitivní závislosti na být načten i když by způsobit cyklů.

Mít modul spustit kód několikrát, export funkce, a volání funkce.

2021-11-23 20:55:25

Skvělé vysvětlení. To je trochu znepokojující, protože jsem tak zvyklý vzor jiné použití, které je import > config > exportovat a pak použít exportovaný objekt po zbytek vašeho projektu. To je špatně, jen config a nelze exportovat. Jak tohle nemůže vytvořit časování? Myslím, že tak dlouho, jak config se stane v době běhu to nebude?
Glenn

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................