Экспорт JavaScript импортируется случайным образом в Polymer PWA Starter Kit
У меня есть файл, который служит макетом сервера, импортирует все другие сервисы и экспортирует их, поэтому мне нужно только один импорт в другие файлы, например, так:
import * as User from './user.js';
import * as Service from './service.js';
export { User, Service };
Теперь каждая из этих услуг просто экспортирует некоторые константы. Вот так:
export const registeredUsers = [
]
Я хочу добиться, чтобы использовать что-то вроде Server.User.registeredUsers в других файлах. Это несколько работает, мой компонент импортирует сервер следующим образом:
import * as Server from '../../mockup/server.js';
Примечание: я использую PWA-Starter-Kit: https://github.com/Polymer/pwa-starter-kit
Теперь я сталкиваюсь со следующей проблемной ситуацией:
Я импортирую * как сервер, как показано выше, и полученный объект иногда имеет атрибут по умолчанию. Это означает, что иногда я должен получить доступ к Server.User, а иногда к Server.default.User. Это кажется совершенно случайным.
Я сделал обходной путь, как это:
let User = Server.User || Server.default.User;
это всегда будет работать. Но это немного глупо, так как поведение кажется непредсказуемым. Я хотел бы отрегулировать это. В чем может быть проблема здесь и как я могу ее решить?
Я уже пытался определить экспорт в server.js по умолчанию.
server.js
import * as User from './user.js';
import * as Service from './service.js';
export default { User, Service };
и импортировать вот так:
import Server from '../../mockup/server.js';
В результате того же вопроса.
Для меня это очень интересная проблема, в чем может быть причина? Случаи использования Server.default.User и Server.User абсолютно случайны. Я могу продолжать обновлять страницу, и она будет время от времени менять свое поведение (иногда при каждом обновлении, иногда только после 3 или более).
Я мог бы не использовать этот огромный файл импорта / экспорта для производства в любом случае, но я все еще хотел бы решить эту проблему. Ради любопытства.
редактировать:
console.log(Server);
console.log(Server.Service);
В результате чего:
или же:
1 ответ
Проблемы, описанные выше, возникли из-за плохого динамического импорта. Где-то еще в моем проекте у меня было два динамических импорта, один из которых был родителем другого. "Случайный" случай, описанный выше, был результатом того, выиграл ли первый или второй импорт в гонке (хотя, почему это привело к тому, как он это сделал, меня озадачило).
Это означает, что я должен был убедиться, что import1 был перед import2, что я просто решил
await import('dynamic import1');
Это решило проблему выше.
Может быть, это поможет кому-то еще наткнуться на эту проблему.