Экспорт 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');

Это решило проблему выше.

Может быть, это поможет кому-то еще наткнуться на эту проблему.

Другие вопросы по тегам