Я боролся с этим в течение некоторого времени, и я начинаю думать, что мой подход совершенно неверен.Если это так, пожалуйста, дайте мне знать и укажите направление.
Контекст
У меня есть два угловых приложения: одно обычное (для настольных ПК) и одно ионное (для мобильных устройств).Я обслуживаю их с помощью экспресс-сервера следующим образом:
app.use(expressStatic(path.join(__dirname, '/../web-app'), { index: false }));
app.use(expressStatic(path.join(__dirname, '/../ionic-app'), { index: false }));
app.get('*', function(req, res) {
if (isMobile(req)) {
res.sendFile(path.join(__dirname, '/../ionic-app/index.html'));
} else {
res.sendFile(path.join(__dirname, '/../web-app/index.html'));
}
});
Он работал с файлом, но недавно я создал их (оба) PWA с помощью команды ng add @angular/pwa ...
и не изменил ничего, связанного с работником сервиса.
Проблема
Теперь я заметил одну проблему с этим решением.Если эти два местоположения /../web-app
/../ionic-app
имеют файл с одинаковым именем (например, ngsw-worker.js
, manifest.webmanifest
), он будет опущен при запросе, подобном этому <link rel="manifest" href="manifest.webmanifest">
.Я не уверен, какой из них будет обслуживаться.
Решение проблемы файлов с одинаковыми именами
Я попытался обойти проблему, заменив приведенный выше код на:
app.get('*.*', (req, res, next) => {
if (isMobile(req)) {
expressStatic(path.join(__dirname, '/../ionic-app'))(req, res, next);
} else {
expressStatic(path.join(__dirname, '/../web-app'))(req, res, next);
}
});
app.get('*', function(req, res) {
if (isMobile(req)) {
res.sendFile(path.join(__dirname, '/../ionic-app/index.html'));
} else {
res.sendFile(path.join(__dirname, '/../web-app/index.html'));
}
});
Это решило проблему с перезаписью файлов, но я нашел по крайней мере еще одну проблему.Выполните следующие действия:
- Войдите на сайт в мобильном режиме - он работает ✅
- Попробуйте войти с отключенной сетью (автономно) - работает)
- Запрос версии для настольного компьютерасайта - работает ✅
- Попробуйте войти с отключенной сетью (оффлайн) - не работает ❌
- Вернуться на мобильную версию сайта - работает ✅
- Попробуйте войти с отключенной сетью (в автономном режиме) - она не работает ❌
Я знаю, что это сценарий, который не применим к большинству пользователей, но все же хотел бы, чтобы он работал.Более того, это убивает возможность запуска приложения в автономном режиме, пока кто-то не очистит кеш.
Я также боюсь, что это решение не очень «чистое» или «по книге».
Вопрос
Каким было бы «элегантное» решение «перейти к» для обслуживания двух разных версий приложения в зависимости от устройства (настольное / мобильное)?
Я бы предпочел, чтобы решение было простымнасколько это возможно, firebase или heroku для хостинга, поэтому никаких сложных решений nginx и т. д.
Мои мысли / исследования
Я заметил различное поведение в интернете:
- Facebook, и некоторые старые сайты перенаправляют вас по другому пути с помощью мобильного приложения (
facebook.com
-> m.facebook.com
) - это не решение, которое я имею в виду. - airbnb делает это молча, сортировкао том, как я хочу это здесь.Так что URL-адрес один и тот же, но обслуживаемое приложение отличается.