У меня есть API со следующим интерфейсом (только для примера)
export type FrogAPI = {
getFrogs(): Promise<Frog[]>
putFrogs(frogs: Frog[]): Promise<void>
}
У меня есть 2 версии этого, 1 фиктивная версия, которая читает и пишет из localStorage:
export class LocalStorageFrogAPI implements FrogAPI {
getFrogs(): Promise<Frog[]> {
return Promise.resolve(JSON.parse(localStorage.getItem('@frogApi/frogs')))
}
// ...
}
И реальная версия, которая работает с удаленным API:
export class HttpFrogAPI implements FrogAPI {
getFrogs(): Promise<Frog[]> {
return fetch('/frogs').then((res) => res.json())
}
// ...
}
Для разработки я использую localStorage, для производства http.
Вопрос : Как я могу условно импортировать правильный файл, чтобы при build time в вывод js включались только нужные источники?Это важно, потому что оба файла стали довольно громоздкими.Я также не хочу показывать версию localStorage в производстве по соображениям безопасности.
Если я сделаю это:
const ApiConstructor = process.env.ENV === 'development'
? require('./LocalStorageFrogAPI')
: require('./HttpFrogAPI')
export const API = new ApiConstructor() as FrogAPI
Оба источника все равно будут включены в сгенерированный вывод.Как правильно иметь только один правильный выходной JS?Возможен ли какой-нибудь конфиг вебпака?