Модули ES6, IMHO, были вдохновлены ценностью IIFE, инкапсуляция является важным преимуществом.Таким образом, рефакторинг IIFE может быть простым.
Сначала вы можете удалить обертку IIFE (вам не нужно это делать, но ее не выгодно, и вам, возможно, следует быть осторожным, поскольку возможности дляаргументы, которые вы передаете, могут отличаться)
Если вы знаете, что библиотека предназначена только для браузера и хотите поддерживать обратную совместимость, вы можете заменить переменную root
на window
.
Следующая задача - определить публичный API и экспортировать его.Итак, скажем, что некоторые из оригинальных API выглядят так:
root.MyLib.prototype.somePublicFn = function () {...}
Вы экспортируете эту функцию следующим образом
export let somePublicFn = function () {...}
И, когда вы делаете
import * as libFns from 'myLib'
libFns
будет действовать как своего рода пространство имен, которое позволит вам сделать,
libFns.somePublicFn(...)
в импортирующем модуле.
И, как я уже упоминал выше, если вы хотите также сделать этот экспорт доступным во всем мире, вам придется вручную подключить его и сделать что-то вроде
const api = {
somePublicFn
...
}
root.MyLib.prototype = Object.assign(root.MyLib.prototype, api)