Uzziniet par Next.js statisko eksportu, lai izveidotu ātras un drošas klienta puses lietojumprogrammas. Izpētiet priekšrocības, iestatīšanu un metodes.
Next.js statiskais eksports: tikai klienta puses lietojumprogrammu izveide
Next.js ir jaudīgs React ietvars, kas ļauj izstrādātājiem veidot veiktspējīgas, mērogojamas un SEO draudzīgas tīmekļa lietojumprogrammas. Lai gan Next.js ir slavens ar savām servera puses renderēšanas (SSR) un statisko vietņu ģenerēšanas (SSG) iespējām, tas piedāvā arī elastību, lai izveidotu tikai klienta puses lietojumprogrammas, izmantojot statisko eksportu. Šī pieeja ļauj jums izmantot Next.js rīku un struktūras priekšrocības, vienlaikus izvietojot tīri klienta puses lietojumprogrammu. Šis raksts jūs iepazīstinās ar visu, kas jums jāzina par tikai klienta puses lietojumprogrammu veidošanu ar Next.js statisko eksportu, aptverot priekšrocības, ierobežojumus, iestatīšanas procesu un progresīvas metodes.
Kas ir Next.js statiskais eksports?
Statiskais eksports Next.js attiecas uz procesu, kurā izveides procesa laikā tiek ģenerēta pilnībā statiska jūsu lietojumprogrammas versija. Tas nozīmē, ka visi HTML, CSS un JavaScript faili ir iepriekš renderēti un gatavi tikt pasniegti tieši no statisko failu servera (piemēram, Netlify, Vercel, AWS S3 vai tradicionāla tīmekļa servera). Atšķirībā no servera puses renderētām lietojumprogrammām, nav nepieciešams Node.js serveris, lai apstrādātu ienākošos pieprasījumus. Tā vietā visa lietojumprogramma tiek piegādāta kā statisku resursu kolekcija.
Mērķējot uz tikai klienta puses lietojumprogrammu, Next.js ģenerē šos statiskos resursus ar pieņēmumu, ka visa dinamiskā uzvedība tiks apstrādāta ar klienta puses JavaScript. Tas ir īpaši noderīgi vienas lapas lietojumprogrammām (SPA), kas galvenokārt paļaujas uz klienta puses maršrutēšanu, API izsaukumiem un lietotāja mijiedarbību.
Kāpēc izvēlēties statisko eksportu klienta puses lietojumprogrammām?
Klienta puses lietojumprogrammu veidošana ar Next.js statisko eksportu piedāvā vairākas pārliecinošas priekšrocības:
- Uzlabota veiktspēja: Statiskos resursus var pasniegt tieši no CDN (satura piegādes tīkla), kas nodrošina ātrāku ielādes laiku un uzlabotu lietotāja pieredzi. Nav nepieciešama servera puses apstrāde, tādējādi samazinot latentumu un uzlabojot mērogojamību.
- Paaugstināta drošība: Bez servera puses komponentes jūsu lietojumprogrammas uzbrukuma virsma ir ievērojami samazināta. Ir mazāk potenciālo ievainojamību, ko izmantot, padarot jūsu lietojumprogrammu drošāku.
- Vienkāršota izvietošana: Statiskas vietnes izvietošana parasti ir daudz vienkāršāka nekā servera puses renderētas lietojumprogrammas izvietošana. Jūs varat izmantot plašu statiskās mitināšanas pakalpojumu sniedzēju klāstu, no kuriem daudzi piedāvā bezmaksas līmeņus vai pieejamus cenu plānus.
- Izmaksu ziņā efektīva mitināšana: Statiskā mitināšana parasti ir lētāka nekā uz serveriem balstīta mitināšana, jo jūs maksājat tikai par uzglabāšanu un joslas platumu.
- Labāks SEO (ar apsvērumiem): Lai gan tradicionāli klienta puses lietojumprogrammām ir SEO izaicinājumi, Next.js statiskais eksports to mazina, iepriekš renderējot sākotnējo HTML struktūru. Tomēr dinamiskam saturam, kas lielā mērā paļaujas uz klienta puses renderēšanu, joprojām var būt nepieciešamas papildu SEO stratēģijas (piemēram, izmantojot iepriekšējas renderēšanas pakalpojumu robotiem).
- Izstrādes pieredze: Next.js nodrošina izcilu izstrādes pieredzi ar tādām funkcijām kā karstā moduļu aizstāšana, ātrā atsvaidzināšana un iebūvētā maršrutēšana, kas atvieglo sarežģītu klienta puses lietojumprogrammu veidošanu un uzturēšanu.
Statiskā eksporta ierobežojumi
Lai gan statiskais eksports piedāvā daudzas priekšrocības, ir svarīgi apzināties tā ierobežojumus:
- Servera puses renderēšanas trūkums: Statiskais eksports nav piemērots lietojumprogrammām, kurām nepieciešama servera puses renderēšana SEO vai veiktspējas apsvērumu dēļ. Visa renderēšana notiek klienta pusē.
- Ierobežots dinamiskais saturs: Lietojumprogrammas, kas lielā mērā paļaujas uz servera puses datu ienesi vai dinamiska satura ģenerēšanu, var nebūt piemērotas statiskajam eksportam. Visa datu ienese un apstrāde jāveic klienta pusē.
- SEO apsvērumi dinamiskam saturam: Kā minēts iepriekš, SEO var būt izaicinājums, ja jūsu lietojumprogrammas saturs lielākoties tiek ģenerēts klienta pusē. Meklētājprogrammu rāpuļprogrammas var nespēt izpildīt JavaScript un pareizi indeksēt saturu.
- Izveides laiks: Statiskas vietnes ģenerēšana var aizņemt ilgāku laiku nekā servera puses renderētas lietojumprogrammas izveide, īpaši lieliem un sarežģītiem projektiem.
Next.js iestatīšana statiskajam eksportam
Šeit ir soli pa solim sniegta rokasgrāmata, kā iestatīt Next.js statiskajam eksportam:
1. Izveidojiet jaunu Next.js projektu
Ja jums vēl nav Next.js projekta, izveidojiet to, izmantojot šādu komandu:
npx create-next-app my-client-app
Iestatīšanas procesā izvēlieties opcijas, kas vislabāk atbilst jūsu vajadzībām (piemēram, TypeScript, ESLint).
2. Konfigurējiet `next.config.js`
Atveriet `next.config.js` failu sava projekta saknes direktorijā un pievienojiet šādu konfigurāciju:
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
trailingSlash: true,
// Neobligāti: mainīt saites /me -> /me/ un emitēt /me.html -> /me/index.html
// skatiet https://nextjs.org/docs/app/api-reference/next-config#trailing-slash
// experimental:
// {appDir: false}
}
module.exports = nextConfig
Opcija `output: 'export'` norāda Next.js ģenerēt statisku jūsu lietojumprogrammas eksportu. Iestatījums `trailingSlash: true` parasti ir ieteicams, lai nodrošinātu konsekventu URL struktūru un izvairītos no potenciālām SEO problēmām.
3. Atjauniniet `package.json`
Pārveidojiet sava `package.json` faila `scripts` sadaļu, lai iekļautu izveides skriptu statiskajam eksportam:
{
"scripts": {
"dev": "next dev",
"build": "next build && next export",
"start": "next start",
"lint": "next lint"
}
}
Šis skripts vispirms izveidos jūsu Next.js lietojumprogrammu un pēc tam eksportēs to uz statisku direktoriju.
4. Ieviesiet klienta puses maršrutēšanu
Tā kā jūs veidojat klienta puses lietojumprogrammu, jums būs jāievieš klienta puses maršrutēšana, izmantojot `next/router` moduli vai trešās puses bibliotēku, piemēram, `react-router-dom`. Šeit ir piemērs, izmantojot `next/router`:
import { useRouter } from 'next/router';
import Link from 'next/link';
function HomePage() {
const router = useRouter();
const handleClick = () => {
router.push('/about');
};
return (
<div>
<h1>Sākumlapa</h1>
<p>Laipni lūdzam sākumlapā!</p>
<button onClick={handleClick}>Doties uz lapu Par mums</button>
<Link href="/about">
<a>Doties uz lapu Par mums (izmantojot Link)</a>
</Link>
</div>
);
}
export default HomePage;
Atcerieties izmantot `Link` komponenti no `next/link` iekšējai navigācijai, lai nodrošinātu plūstošas klienta puses pārejas.
5. Apstrādājiet datu ienesi klienta pusē
Klienta puses lietojumprogrammā visa datu ienese jāveic klienta pusē, izmantojot tādas metodes kā `useEffect` vai `useState` āķus (hooks). Piemēram:
import { useState, useEffect } from 'react';
function DataPage() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`HTTP kļūda! statuss: ${response.status}`);
}
const jsonData = await response.json();
setData(jsonData);
} catch (e) {
setError(e);
} finally {
setLoading(false);
}
}
fetchData();
}, []);
if (loading) return <p>Notiek ielāde...</p>;
if (error) return <p>Kļūda: {error.message}</p>;
if (!data) return <p>Nav datu, ko attēlot</p>;
return (
<div>
<h1>Datu lapa</h1>
<pre>{JSON.stringify(data, null, 2)}</pre>
</div>
);
}
export default DataPage;
6. Izveidojiet un eksportējiet savu lietojumprogrammu
Palaidiet izveides skriptu, lai ģenerētu statisko eksportu:
npm run build
Tas izveidos `out` (vai `public` atkarībā no Next.js versijas) direktoriju, kas saturēs statiskos HTML, CSS un JavaScript failus jūsu lietojumprogrammai.
7. Izvietojiet savu statisko vietni
Tagad jūs varat izvietot `out` direktorijas saturu statiskās mitināšanas pakalpojumu sniedzējā, piemēram, Netlify, Vercel, AWS S3 vai GitHub Pages. Lielākā daļa pakalpojumu sniedzēju piedāvā vienkāršu vilkšanas un nomešanas izvietošanu vai komandrindas rīkus, lai automatizētu procesu.
Progresīvas metodes klienta puses Next.js lietojumprogrammām
Šeit ir dažas progresīvas metodes, lai optimizētu jūsu klienta puses Next.js lietojumprogrammas:
1. Koda sadalīšana un slinkā ielāde (Lazy Loading)
Izmantojiet dinamiskos importus (`import()`), lai sadalītu savu kodu mazākos gabalos, kas tiek ielādēti pēc pieprasījuma. Tas var ievērojami uzlabot sākotnējo ielādes laiku, īpaši lielām lietojumprogrammām.
import React, { Suspense } from 'react';
const MyComponent = React.lazy(() => import('./MyComponent'));
function MyPage() {
return (
<Suspense fallback={<div>Notiek ielāde...</div>}>
<MyComponent />
</Suspense>
);
}
2. Attēlu optimizācija
Izmantojiet `next/image` komponenti attēlu optimizācijai. Šī komponente automātiski optimizē attēlus dažādām ierīcēm un ekrāna izmēriem, uzlabojot veiktspēju un lietotāja pieredzi. Tā atbalsta slinko ielādi, adaptīvus attēlus un dažādus attēlu formātus.
import Image from 'next/image';
function MyComponent() {
return (
<Image
src="/images/my-image.jpg"
alt="Mans attēls"
width={500}
height={300}
/>
);
}
3. Servisa darbinieki (Service Workers)
Ieviesiet servisa darbinieku, lai iespējotu bezsaistes funkcionalitāti un uzlabotu veiktspēju. Servisa darbinieks ir skripts, kas darbojas fonā un var pārtvert tīkla pieprasījumus, kešot resursus un sūtīt paziņojumus. Bibliotēkas, piemēram, `next-pwa`, var vienkāršot servisa darbinieka pievienošanas procesu jūsu Next.js lietojumprogrammai.
4. Vides mainīgie
Izmantojiet vides mainīgos, lai konfigurētu savu lietojumprogrammu dažādām vidēm (piemēram, izstrāde, sagatavošana, ražošana). Next.js nodrošina iebūvētu atbalstu vides mainīgajiem, izmantojot `.env` failu un `process.env` objektu. Esiet uzmanīgi, lai neeksponētu sensitīvu informāciju klienta puses kodā. Izmantojiet vides mainīgos galvenokārt konfigurācijas iestatījumiem, kurus ir droši eksponēt.
5. Monitorings un analītika
Integrējiet monitoringa un analītikas pakalpojumu (piemēram, Google Analytics, Sentry vai New Relic), lai izsekotu veiktspējas metrikas, identificētu kļūdas un gūtu ieskatu lietotāju uzvedībā. Tas palīdzēs jums optimizēt lietojumprogrammu un laika gaitā uzlabot lietotāja pieredzi.
6. SEO optimizācija klienta puses lietojumprogrammās
Lai gan statiskais eksports nodrošina sākotnējo HTML struktūru, apsveriet šīs stratēģijas labākam SEO klienta puses ietilpīgās lietojumprogrammās:
- Iepriekšējas renderēšanas pakalpojumi: Izmantojiet pakalpojumu, piemēram, prerender.io, lai pasniegtu pilnībā renderētu HTML meklētājprogrammu robotiem.
- Dinamiskas vietnes kartes: Dinamiski ģenerējiet un atjauniniet savu vietnes kartes XML, pamatojoties uz jūsu lietojumprogrammas saturu.
- Strukturēti dati: Ieviesiet strukturētu datu iezīmēšanu (Schema.org), lai palīdzētu meklētājprogrammām saprast jūsu saturu.
- Meta tagi: Dinamiski atjauniniet meta tagus (virsraksts, apraksts utt.), izmantojot bibliotēkas, piemēram, `react-helmet`, pamatojoties uz pašreizējo maršrutu un saturu.
- Satura piegāde: Nodrošiniet, ka jūsu saturs tiek ielādēts ātri visā pasaulē. Izmantojiet CDN. Lietotājam Austrālijā vajadzētu būt tādai pašai ātrai pieredzei kā lietotājam ASV.
Internacionalizācijas (i18n) apsvērumi
Veidojot klienta puses lietojumprogrammu globālai auditorijai, internacionalizācija (i18n) ir ļoti svarīga. Šeit ir dažas labākās prakses:
- Tulkojumu faili: Glabājiet tulkojumus atsevišķos failos katrai valodai. Izmantojiet bibliotēku, piemēram, `i18next` vai `react-intl`, lai pārvaldītu tulkojumus.
- Lokalizācijas noteikšana: Ieviesiet lokalizācijas noteikšanu, pamatojoties uz lietotāja pārlūkprogrammas iestatījumiem vai IP adresi.
- Maršrutēšana: Izmantojiet URL prefiksus vai apakšdomēnus, lai norādītu pašreizējo valodu (piemēram, `/en/`, `/fr/`, `en.example.com`, `fr.example.com`). Next.js ir iebūvēts i18n maršrutēšanas atbalsts kopš 10. versijas.
- Skaitļu un datumu formatēšana: Izmantojiet lokalizācijai specifisku skaitļu un datumu formatēšanu, lai nodrošinātu datu pareizu attēlošanu dažādām kultūrām.
- No labās uz kreiso (RTL) atbalsts: Atbalstiet valodas, kas rakstāmas no labās uz kreiso, piemēram, arābu un ebreju, izmantojot CSS loģiskās īpašības un virziena atribūtus.
- Valūtas formatēšana: Attēlojiet valūtas, izmantojot pareizos simbolus un formātus dažādām lokalizācijām. Bibliotēkas, piemēram, `Intl.NumberFormat`, var būt ļoti noderīgas.
Pareizās pieejas izvēle: statiskais eksports pret servera puses renderēšanu
Lēmums, vai izmantot statisko eksportu vai servera puses renderēšanu, ir atkarīgs no jūsu lietojumprogrammas specifiskajām prasībām. Apsveriet šādus faktorus:
- Satura veids: Vai jūsu saturs galvenokārt ir statisks vai dinamisks? Ja tas ir lielākoties statisks, statiskais eksports ir laba izvēle. Ja tas ir ļoti dinamisks un prasa servera puses datu ienesi, servera puses renderēšana var būt piemērotāka.
- SEO prasības: Cik svarīgs ir SEO jūsu lietojumprogrammai? Ja SEO ir kritiski svarīgs, servera puses renderēšana var būt nepieciešama, lai nodrošinātu, ka meklētājprogrammu rāpuļprogrammas var pareizi indeksēt jūsu saturu.
- Veiktspējas prasības: Kādas ir veiktspējas prasības jūsu lietojumprogrammai? Statiskais eksports var nodrošināt izcilu veiktspēju statiskam saturam, savukārt servera puses renderēšana var uzlabot veiktspēju dinamiskam saturam, samazinot klienta puses apstrādi.
- Sarežģītība: Cik sarežģīta ir jūsu lietojumprogramma? Statisko eksportu parasti ir vienkāršāk iestatīt un izvietot, savukārt servera puses renderēšana var pievienot sarežģītību jūsu izstrādes procesam.
- Budžets: Kāds ir jūsu budžets mitināšanai un infrastruktūrai? Statiskā mitināšana parasti ir lētāka nekā uz serveriem balstīta mitināšana.
Reālās pasaules piemēri
Šeit ir daži reālās pasaules piemēri lietojumprogrammām, kas var gūt labumu no Next.js statiskā eksporta:
- Galvenās lapas (Landing Pages): Vienkāršas galvenās lapas ar statisku saturu un minimālu interaktivitāti.
- Dokumentācijas vietnes: Dokumentācijas vietnes ar iepriekš renderētu saturu un klienta puses meklēšanas funkcionalitāti.
- Blogi (ar CMS): Blogi, kuru saturs tiek pārvaldīts caur bezgalvas CMS (headless CMS) un ienests klienta pusē.
- Portfeļi: Personīgie vai profesionālie portfeļi ar statisku informāciju un klienta puses maršrutēšanu.
- E-komercijas produktu katalogi: Mazi un vidēji e-komercijas veikali, kas var iepriekš renderēt produktu detaļas, kur dinamiski iepirkumu groza un norēķinu procesi tiek apstrādāti klienta pusē.
Piemērs: Starptautiska uzņēmuma vietne
Iedomājieties uzņēmumu ar birojiem Ņujorkā, Londonā un Tokijā. Viņi vēlas vietni, kas pieejama angļu, franču un japāņu valodā. Next.js statiskais eksports, apvienojumā ar bezgalvas CMS un i18n bibliotēkām, varētu būt ideāls. CMS uzglabātu tulkoto saturu, Next.js to ienestu un renderētu klienta pusē, un statisko vietni varētu izvietot globāli CDN, lai nodrošinātu ātru piekļuvi.
Noslēgums
Next.js statiskais eksports nodrošina jaudīgu veidu, kā veidot tikai klienta puses lietojumprogrammas ar Next.js ietvara priekšrocībām. Izprotot priekšrocības, ierobežojumus, iestatīšanas procesu un progresīvās metodes, jūs varat izveidot ātras, drošas un globāli pieejamas tīmekļa pieredzes, kas atbilst jūsu specifiskajām prasībām. Neatkarīgi no tā, vai veidojat vienkāršu galveno lapu vai sarežģītu SPA, statiskais eksports var būt vērtīgs rīks jūsu tīmekļa izstrādes arsenālā.