Модули оцениваются один раз, это одно из их основных свойств. Можно переоценить модуль в некоторой среде, которая поддерживает его (Node.js), но не в клиентском приложении.
В этом случае библиотека жестко запрограммирована для использования fx.rates
object . Даже если он скопирован, он продолжит использовать его.
Надлежащим способом является изменение исходного кода библиотеки для поддержки нескольких экземпляров.
Альтернативой является создание оболочки, которая взламывает библиотеку и ведет себя так, как ожидается. Учитывая, что это convert
метод, который использует fx.rates
и он синхронный, его можно пропатчить, чтобы поменять свойство rates
во время вызова:
import fx from 'money'
export default function fxFactory(rates) {
return Object.assign({}, fx, {
convert(...args) {
let convertResult;
const ratesOriginal = fx.rates;
try {
fx.rates = rates;
convertResult = fx.convert(...args);
} finally {
fx.rates = ratesOriginal;
}
return convertResult;
}
});
}
// a.js
import fxFactory from './fx'
const rates={USD:1, EUR: 2.001};
const fx1 = fxFactory(rates);