Как сделать обнаружение устройства с помощью SSR в Svelte/Sapper?
Мне нужно определить пользовательское устройство (браузер, ОС и т. Д.) И показать различную навигацию в зависимости от типа устройства (мобильное или настольное). Он должен работать во время SSR в Sapper/Svelte.
Любая помощь с этим очень ценится!
1 ответ
Для Sapper server.js:
polka() // You can also use Express
.use(
compression({ threshold: 0 }),
sirv('static', { dev }),
sapper.middleware({
// let make device detection possibility, e.g. in <Nav> component
session: (req, res) => ({
'user-agent': req.headers['user-agent']
})
})
)
.listen(PORT, err => {
if (err) console.log('error', err);
});
Для компонента Sapper Nav.svelte
<script>
export let segment;
import { stores } from '@sapper/app';
import UAParser from 'ua-parser-js';
// session is passed in server.js
const { preloading, page, session } = stores();
var parser = new UAParser();
parser.setUA($session['user-agent']);
let mobile = parser.getResult().device['type'] == 'mobile';
</script>
{#if mobile}
<p>Mobile menu here</p>
{:else}
<p>Desktop menu here</p>
{/if}
Кроме того, не забудьте сначала сделать npm установкой ua-parser-js --save!
Взгляните на tailwind css, он хорошо сочетается с использованием класса svelte: https://tailwindcss.com/docs/responsive-design/
Также есть примеры использования rollup для интеграции с sapper:https://github.com/langbamit/sapper-postcss-tailwind-rollup