亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) web前端 js教程 Nuxt.js 實(shí)際應(yīng)用:Vue.js 服務(wù)器端渲染框架

Nuxt.js 實(shí)際應(yīng)用:Vue.js 服務(wù)器端渲染框架

Dec 31, 2024 am 06:35 AM

Nuxt.js in action: Vue.js server-side rendering framework

創(chuàng)建 Nuxt.js 項(xiàng)目

首先,確保您已經(jīng)安裝了 Node.js 和 YARN 或 NPM。然后,通過(guò)命令行創(chuàng)建一個(gè)新的 Nuxt.js 項(xiàng)目:

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

在創(chuàng)建過(guò)程中,您可以選擇是否需要UI框架、預(yù)處理器等選項(xiàng),并根據(jù)需要進(jìn)行配置。

目錄結(jié)構(gòu)

Nuxt.js遵循特定的目錄結(jié)構(gòu),部分關(guān)鍵目錄如下:

├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions
  • .nu??xt/:該目錄是自動(dòng)生成的,包含編譯后的代碼。一般不需要直接修改。
  • asset/:存放未編譯的靜態(tài)資源,如CSS、JavaScript、圖片等。 Nuxt.js 將在構(gòu)建期間處理這些資源。
  • Components/:存儲(chǔ)可以在應(yīng)用程序的不同部分重用的自定義 Vue 組件。
  • layouts/:定義頁(yè)面的布局。可以有一個(gè)默認(rèn)布局或多個(gè)特定布局。
  • page/:每個(gè)文件對(duì)應(yīng)一個(gè)路由,文件名就是路由名。動(dòng)態(tài)路由用方括號(hào)[]表示。
  • middleware/: 放置自定義中間件,可以在頁(yè)面渲染前后執(zhí)行邏輯。
  • plugins/: Vue.js 插件的自定義入口文件。
  • static/:不做任何處理,直接復(fù)制到構(gòu)建輸出目錄,常用于存放robots.txt或favicon.ico等
  • store/:Vuex 狀態(tài)管理目錄,存儲(chǔ) actions、mutations、getters 以及整個(gè) store 的入口文件。
  • nuxt.config.js:Nuxt.js配置文件,用于自定義項(xiàng)目設(shè)置。
  • package.json:項(xiàng)目依賴和腳本配置。
  • yarn.lock 或 npm.lock:記錄項(xiàng)目依賴的準(zhǔn)確版本,以保證不同環(huán)境下依賴的一致性。

頁(yè)面渲染

在pages/目錄下創(chuàng)建一個(gè)index.vue文件。這是應(yīng)用程序的主頁(yè):

<!-- pages/index.vue -->
<template>
  <div>
    <h1>Hello from Nuxt.js SSR</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'This content is server-rendered!'
    };
  },
  asyncData() {
    // Here you can get data on the server side
    // The returned data will be used as the default value of data
    return { message: 'Data fetched on server' };
  }
};
</script>

Nuxt.js頁(yè)面渲染的過(guò)程分為兩個(gè)主要階段:服務(wù)器端渲染(SSR)和客戶端渲染(CSR)。以下是Nuxt.js頁(yè)面渲染的詳細(xì)步驟:

初始化:

用戶在瀏覽器中輸入U(xiǎn)RL并向服務(wù)器發(fā)送請(qǐng)求。

服務(wù)器收到請(qǐng)求后,開(kāi)始處理。

路線分辨率:

Nuxt.js 使用 nuxt.config.js 中的路由配置(如果存在)或自動(dòng)從pages/目錄生成路由。

識(shí)別對(duì)應(yīng)的頁(yè)面文件,如pages/index.vue或pages/about.vue。

數(shù)據(jù)預(yù)?。?

Nuxt.js 在頁(yè)面組件中查找 asyncData 或 fetch 方法(如果存在)。

這些方法將在服務(wù)器端運(yùn)行,以從 API 或其他數(shù)據(jù)源獲取數(shù)據(jù)。

獲取到數(shù)據(jù)后,會(huì)序列化并注入到頁(yè)面模板中

模板渲染:

Nuxt.js 使用 Vue.js 的渲染引擎將組件和預(yù)取的數(shù)據(jù)轉(zhuǎn)換為 HTML 字符串。
HTML 字符串包含客戶端所需的所有初始數(shù)據(jù),內(nèi)聯(lián)在 <script> 中。 JSON 格式的標(biāo)簽。</script>

返回 HTML:

服務(wù)器將生成的 HTML 響應(yīng)發(fā)送回客戶端(瀏覽器)。

客戶端初始化:

瀏覽器收到 HTML 后,開(kāi)始解析并執(zhí)行內(nèi)聯(lián) JavaScript。
Nuxt.js 客戶端庫(kù) (nuxt.js) 已加載并初始化。

客戶端渲染:

客戶端庫(kù)接管渲染,創(chuàng)建 Vue.js 實(shí)例,并將數(shù)據(jù)從內(nèi)聯(lián) JSON 注入到 Vue 實(shí)例中。
頁(yè)面完成初始渲染,用戶可以看到完整的頁(yè)面內(nèi)容。
此時(shí),頁(yè)面是交互式的,用戶可以觸發(fā)事件并進(jìn)行導(dǎo)航。

后續(xù)導(dǎo)航:

當(dāng)用戶導(dǎo)航到其他頁(yè)面時(shí),Nuxt.js 使用客戶端路由(Vue Router)進(jìn)行無(wú)刷新跳轉(zhuǎn)。
如果新頁(yè)面需要數(shù)據(jù),則 asyncData 或 fetch 方法將在客戶端運(yùn)行,獲取新數(shù)據(jù)并更新視圖。

SSG(靜態(tài)站點(diǎn)生成):

在開(kāi)發(fā)之外,您可以使用 nuxtgenerate 命令生成靜態(tài) HTML 文件。

每個(gè)頁(yè)面都將預(yù)渲染為一個(gè)單獨(dú)的 HTML 文件,其中包含所有必要的數(shù)據(jù)和資源。

使用異步數(shù)據(jù)

asyncData 方法是 Nuxt.js 獨(dú)有的,允許您在服務(wù)器上預(yù)取數(shù)據(jù)并在客戶端上重用它。在上面的示例中,我們只是更改了 message 的值,但在實(shí)際應(yīng)用中,您可能會(huì)在這里調(diào)用 API 來(lái)獲取數(shù)據(jù)。

中間件

中間件(Middleware)是一個(gè)功能,可以讓你在路由改變之前和之后執(zhí)行特定的邏輯。中間件可以在全局、頁(yè)面級(jí)別或布局級(jí)別使用,以處理身份驗(yàn)證、數(shù)據(jù)預(yù)加載、路由防護(hù)等任務(wù)。

1. 全局中間件

全局中間件在 nuxt.config.js 文件中配置,并影響應(yīng)用程序中的所有頁(yè)面:

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

中間件文件通常位于middleware/目錄下,如middleware/globalMiddleware1.js:

├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions

2.頁(yè)面級(jí)中間件

頁(yè)面級(jí)中間件僅影響特定頁(yè)面。在頁(yè)面組件中聲明中間件:

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

對(duì)應(yīng)的中間件文件位于middleware/目錄下,例如middleware/pageMiddleware.js:

├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions

3.布局級(jí)中間件

布局級(jí)中間件與頁(yè)面級(jí)類似,但它適用于所有使用布局的頁(yè)面。在布局組件中聲明中間件:

<!-- pages/index.vue -->
<template>
  <div>
    <h1>Hello from Nuxt.js SSR</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'This content is server-rendered!'
    };
  },
  asyncData() {
    // Here you can get data on the server side
    // The returned data will be used as the default value of data
    return { message: 'Data fetched on server' };
  }
};
</script>

對(duì)應(yīng)的中間件文件位于middleware/目錄:

// nuxt.config.js
export default {
// ...
    router: {
        middleware: ['globalMiddleware1', 'globalMiddleware2'] // can be a string array
    }
};

中間件上下文

中間件函數(shù)接收一個(gè)上下文對(duì)象作為參數(shù),其中包含以下屬性:

  • req(HTTP請(qǐng)求對(duì)象,僅在服務(wù)器端有效)

  • res(HTTP響應(yīng)對(duì)象,僅在服務(wù)器端有效)

  • redirect(用于重定向的函數(shù))

  • app(Vue 實(shí)例)

  • 路線(當(dāng)前路線信息)

  • store(Vuex 商店,如果啟用)

  • payload(如果有asyncData返回的數(shù)據(jù))

中間件可以順序執(zhí)行,每個(gè)中間件都可以通過(guò)重定向功能決定是繼續(xù)執(zhí)行鏈中的下一個(gè)中間件還是中斷路由。

動(dòng)態(tài)路由

Nuxt.js支持動(dòng)態(tài)路由,這對(duì)于處理博客文章、用戶個(gè)人資料等具有動(dòng)態(tài)ID的內(nèi)容非常有用。在pages/目錄中創(chuàng)建動(dòng)態(tài)路由文件,例如[id].vue:

// middleware/globalMiddleware1.js
export default function (context) {
    // context contains information such as req, res, redirect, app, route, store, etc.
    console.log('Global Middleware 1 executed');
}

這里的[id]代表一個(gè)動(dòng)態(tài)參數(shù),asyncData會(huì)自動(dòng)處理這個(gè)參數(shù)并獲取對(duì)應(yīng)ID的博文。

布局
布局允許您定義全局或特定頁(yè)面的通用結(jié)構(gòu)。在layouts/目錄下創(chuàng)建default.vue文件:

// pages/about.vue
export default {
    middleware: 'pageMiddleware' // can be a string or a function
};

默認(rèn)情況下,所有頁(yè)面都將使用此布局。如果你想為特定頁(yè)面設(shè)置不同的布局,可以在頁(yè)面組件中指定:

// middleware/pageMiddleware.js
export default function (context) {
    console.log('Page Middleware executed');
}

插件和庫(kù)集成
Nuxt.js 支持 Vue.js 插件,您可以在 nuxt.config.js 中配置:

// layouts/default.vue
export default {
    middleware: ['layoutMiddleware1', 'layoutMiddleware2']
};

然后在plugins/目錄下創(chuàng)建對(duì)應(yīng)的文件,如vuetify.js:

// middleware/layoutMiddleware1.js
export default function (context) {
    console.log('Layout Middleware 1 executed');
}

// middleware/layoutMiddleware2.js
export default function (context) {
    console.log('Layout Middleware 2 executed');
}

配置與優(yōu)化

Nuxt.js 配置文件 (nuxt.config.js)

nuxt.config.js 是 Nuxt 應(yīng)用程序的主要配置文件,用于自定義應(yīng)用程序的行為。以下是一些常用的配置項(xiàng):

  • mode:設(shè)置應(yīng)用程序的運(yùn)行模式??蛇x值為'spa'(單頁(yè)應(yīng)用)、'universal'(服務(wù)器端渲染)和'static'(靜態(tài)生成)。默認(rèn)為“通用”。
  • head:配置頁(yè)面的部分,如標(biāo)題、元數(shù)據(jù)、鏈接等
  • css:指定全局CSS文件,可以是文件路徑數(shù)組
  • build:配置構(gòu)建過(guò)程,例如transpile、extractCSS、extend等。例如,您可以在此處添加Babel插件或調(diào)整Webpack配置。
  • router:自定義路由配置,如基本路徑、模式等
  • axios:配置axios模塊,包括基礎(chǔ)URL、代理設(shè)置等
  • plugins:注冊(cè)全局Vue插件,可以指定在客戶端或者服務(wù)端加載。
  • modules:加載外部模塊,如@nuxtjs/axios、@nuxtjs/proxy等
  • env:定義環(huán)境變量,該變量將在構(gòu)建時(shí)注入到客戶端和服務(wù)器中。
yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

優(yōu)化策略

  • 異步數(shù)據(jù)預(yù)取(asyncData/fetch):使用asyncData或fetch方法在服務(wù)器端預(yù)取數(shù)據(jù),以減輕客戶端渲染的負(fù)擔(dān)。
  • 代碼拆分:Nuxt.js 自動(dòng)拆分代碼,確保只有在訪問(wèn)路由時(shí)才加載相關(guān)代碼。
  • 靜態(tài)站點(diǎn)生成(SSG):使用 nuxtgenerate 命令生成靜態(tài) HTML 文件,適合內(nèi)容變化不頻繁的站點(diǎn),提高加載速度和 SEO 友好性。
  • 緩存策略:使用ETag、Last-Modified等HTTP緩存策略,減少重復(fù)請(qǐng)求。
  • Vue.js 優(yōu)化:確保Vue組件的優(yōu)化,比如避免無(wú)用的watchers、使用v-once減少重新渲染等
  • 圖片優(yōu)化:使用正確的圖片格式(如WebP),保證圖片大小合適,使用延遲加載技術(shù)。
  • Service Worker:集成 PWA 支持并使用 Service Worker 進(jìn)行離線緩存和推送通知。
  • Tree Shaking:確保您的依賴項(xiàng)支持 Tree Shaking 以刪除未使用的代碼。
  • 分析與監(jiān)控:使用 nuxt build --analyze 或集成第三方工具(如 Google Lighthouse)進(jìn)行性能分析,持續(xù)監(jiān)控應(yīng)用性能。

靜態(tài)站點(diǎn)生成 (SSG)

Nuxt.js 的靜態(tài)站點(diǎn)生成(SSG)是通過(guò) nuxtgenerate 命令實(shí)現(xiàn)的。該命令遍歷應(yīng)用程序的路由并為每個(gè)路由生成一個(gè)預(yù)渲染的 HTML 文件,該文件可以直接部署到任何靜態(tài)文件托管服務(wù)。以下是有關(guān) SSG 的一些要點(diǎn):

1。配置:在nuxt.config.js文件中,可以配置generate選項(xiàng)來(lái)控制靜態(tài)生成的行為:

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

2。生成:運(yùn)行npm rungenerate或yarngenerate來(lái)啟動(dòng)靜態(tài)生成過(guò)程。 Nuxt.js會(huì)根據(jù)generate.routes中的配置生成相應(yīng)的HTML文件。如果沒(méi)有顯式定義,會(huì)自動(dòng)掃描pages/目錄下的所有文件生成路由。

3。數(shù)據(jù)預(yù)取:在頁(yè)面組件中,可以使用asyncData或fetch方法來(lái)預(yù)取數(shù)據(jù)。這些數(shù)據(jù)會(huì)在生成靜態(tài)頁(yè)面時(shí)注入到 HTML 中,這樣客戶端加載時(shí)頁(yè)面不需要額外的請(qǐng)求:

├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions

4。中間件處理:SSG過(guò)程中不會(huì)執(zhí)行服務(wù)器端中間件,因?yàn)镾SG在沒(méi)有服務(wù)器環(huán)境的情況下生成靜態(tài)文件。因此,如果生成時(shí)需要執(zhí)行一些邏輯,最好在 asyncData 或 fetch 中處理。

5。部署:生成的靜態(tài)文件可以部署到任何靜態(tài)文件托管服務(wù),例如 Netlify、Vercel、GitHub Pages 或 AWS S3。這些服務(wù)通常不需要運(yùn)行任何服務(wù)器端代碼,只需上傳生成的 dist 文件夾即可。

6。 SEO 優(yōu)化:SSG 改進(jìn)了 SEO,因?yàn)樗阉饕媾老x(chóng)可以讀取預(yù)渲染的 HTML 內(nèi)容,而無(wú)需等待 JavaScript 執(zhí)行。

7。動(dòng)態(tài)路由:對(duì)于動(dòng)態(tài)路由,Nuxt.js 將嘗試生成所有可能的組合。如果無(wú)法預(yù)測(cè)所有可能的動(dòng)態(tài)路由,可以在generate.routes中手動(dòng)指定,或者使用generate.includePaths和generate.excludePaths進(jìn)行控制。

8。 404頁(yè)面:將generate.fallback設(shè)置為true將為未預(yù)渲染的動(dòng)態(tài)路由生成404頁(yè)面。當(dāng)用戶訪問(wèn)這些路由時(shí),Nuxt.js 會(huì)嘗試在客戶端渲染它們。

運(yùn)行 nuxtgenerate 命令,Nuxt.js 將生成靜態(tài) HTML 文件。

驗(yàn)證和錯(cuò)誤處理

驗(yàn)證

驗(yàn)證通常涉及表單數(shù)據(jù)或 API 請(qǐng)求的輸入驗(yàn)證。 Nuxt.js 本身不直接提供驗(yàn)證庫(kù),但你可以集成第三方庫(kù)如 Vuelidate、vee-validate,或者使用 TypeScript 進(jìn)行類型檢查。

使用 Vee-Validate
1.安裝:首先需要安裝vee-validate庫(kù):

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project

2。配置:在nuxt.config.js中添加Vue插件配置:

├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions

3。創(chuàng)建插件:在plugins/vee-validate.js中配置Vee-Validate:

<!-- pages/index.vue -->
<template>
  <div>
    <h1>Hello from Nuxt.js SSR</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'This content is server-rendered!'
    };
  },
  asyncData() {
    // Here you can get data on the server side
    // The returned data will be used as the default value of data
    return { message: 'Data fetched on server' };
  }
};
</script>

4。用法:在組件中使用 Vee-Validate 進(jìn)行表單驗(yàn)證:

// nuxt.config.js
export default {
// ...
    router: {
        middleware: ['globalMiddleware1', 'globalMiddleware2'] // can be a string array
    }
};

錯(cuò)誤處理

Nuxt.js 提供了多種處理錯(cuò)誤的方法,包括全局錯(cuò)誤處理和特定于頁(yè)面的錯(cuò)誤處理。

全局錯(cuò)誤處理

  • 自定義錯(cuò)誤頁(yè)面:在layouts目錄下創(chuàng)建error.vue文件,用于自定義錯(cuò)誤頁(yè)面布局。
  • 捕獲全局錯(cuò)誤:在 nuxt.config.js 中配置 error 屬性來(lái)捕獲全局錯(cuò)誤:
// middleware/globalMiddleware1.js
export default function (context) {
    // context contains information such as req, res, redirect, app, route, store, etc.
    console.log('Global Middleware 1 executed');
}

頁(yè)面特定的錯(cuò)誤處理

在頁(yè)面組件中,可以使用asyncData或fetch方法的try-catch結(jié)構(gòu)來(lái)處理錯(cuò)誤:

// pages/about.vue
export default {
    middleware: 'pageMiddleware' // can be a string or a function
};

API 請(qǐng)求錯(cuò)誤處理

對(duì)于API請(qǐng)求,如果使用@nuxtjs/axios模塊,可以在請(qǐng)求攔截器中統(tǒng)一處理錯(cuò)誤:

// middleware/pageMiddleware.js
export default function (context) {
    console.log('Page Middleware executed');
}

確保在 nuxt.config.js 中注冊(cè)此插件。

Vue生態(tài)系統(tǒng)整合

Vue路由器:

Nuxt.js 根據(jù)文件結(jié)構(gòu)自動(dòng)為您的應(yīng)用程序生成路由系統(tǒng)。路由配置通常不需要手動(dòng)編寫(xiě),而是可以通過(guò)nuxt.config.js的router屬性進(jìn)行擴(kuò)展。

視圖:

Nuxt.js 自動(dòng)創(chuàng)建一個(gè) Vuex 存儲(chǔ)。在 store 目錄下,您可以創(chuàng)建模塊化狀態(tài)、突變、操作和 getter。例如,創(chuàng)建一個(gè) store/modules/users.js 文件來(lái)管理用戶數(shù)據(jù)。

// layouts/default.vue
export default {
    middleware: ['layoutMiddleware1', 'layoutMiddleware2']
};

Vue 命令行界面:

Nuxt.js 提供了自己的構(gòu)建工具,但它也是基于 Vue CLI 的。這意味著您可以使用類似于 Vue CLI 的命令行工具,例如 npx nuxtgenerate(靜態(tài)生成)或 npxnuxtbuild(構(gòu)建應(yīng)用程序)。

通天塔:

Nuxt.js 默認(rèn)配置了 Babel 以支持最新的 JavaScript 功能。除非有特殊需要,通常不需要手動(dòng)配置 Babel。

打字稿:

要使用 TypeScript,請(qǐng)?jiān)?? nuxt.config.js 中設(shè)置 typescript: true ,Nuxt.js 將自動(dòng)配置 TypeScript 支持。

ESLint:

為了檢查代碼質(zhì)量,您可以在項(xiàng)目中安裝 ESLint 并配置 .eslintrc.js。 Nuxt.js 提供 @nuxt/eslint-module 插件來(lái)簡(jiǎn)化集成。

// middleware/layoutMiddleware1.js
export default function (context) {
    console.log('Layout Middleware 1 executed');
}

// middleware/layoutMiddleware2.js
export default function (context) {
    console.log('Layout Middleware 2 executed');
}

Vue使用:

VueUse 是一個(gè) Vue 用例庫(kù),包含各種實(shí)用功能。要集成,首先安裝@vueuse/core,然后導(dǎo)入并使用組件中的功能。

yarn create nuxt-app my-nuxt-project
cd my-nuxt-project
├── .nuxt/ # Automatically generated files, including compiled code and configuration
├── assets/ # Used to store uncompiled static resources, such as CSS, images, fonts
├── components/ # Custom Vue components
├── layouts/ # Application layout files, defining the general structure of the page
│ └── default.vue # Default layout
├── middleware/ # Middleware files
├── pages/ # Application routes and views, each file corresponds to a route
│ ├── index.vue # Default homepage
│ └── [slug].vue # Dynamic routing example
├── plugins/ # Custom Vue.js plugins
├── static/ # Static resources, will be copied to the output directory as is
├── store/ # Vuex state management file
│ ├── actions.js # Vuex actions
│ ├── mutations.js # Vuex mutations
│ ├── getters.js # Vuex getters
│ └── index.js # Vuex store entry file
├── nuxt.config.js # Nuxt.js configuration file
├── package.json # Project dependencies and scripts
└── yarn.lock # Or npm.lock, record dependency versions

Vue 插件:

可以通過(guò)nuxt.config.js中的plugins配置項(xiàng)全局注冊(cè)Vue插件。例如,集成 Vue Toastify 來(lái)顯示通知:

<!-- pages/index.vue -->
<template>
  <div>
    <h1>Hello from Nuxt.js SSR</h1>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'This content is server-rendered!'
    };
  },
  asyncData() {
    // Here you can get data on the server side
    // The returned data will be used as the default value of data
    return { message: 'Data fetched on server' };
  }
};
</script>
// nuxt.config.js
export default {
// ...
    router: {
        middleware: ['globalMiddleware1', 'globalMiddleware2'] // can be a string array
    }
};

使用 Nuxt.js 的工作流程

Nuxt.js 提供了完整的開(kāi)發(fā)、構(gòu)建和部署工作流程。使用 nuxt 命令啟動(dòng)開(kāi)發(fā)服務(wù)器,使用 nuxt build 進(jìn)行生產(chǎn)構(gòu)建,使用 nuxt start 啟動(dòng)生產(chǎn)服務(wù)器,使用 nuxtgenerate 生成靜態(tài)文件。

性能優(yōu)化

  1. 靜態(tài)生成(SSG):使用nuxtgenerate命令生成預(yù)渲染的HTML文件,可以大大提高首屏加載速度,并且對(duì)SEO友好。

  2. 代碼拆分:Nuxt.js 默認(rèn)會(huì)進(jìn)行代碼拆分,將應(yīng)用分成多個(gè)小塊,只加載當(dāng)前頁(yè)面所需的代碼,減少初始加載量。

  3. 延遲加載:對(duì)于大型應(yīng)用程序,可以考慮延遲加載組件或模塊,僅在需要時(shí)加載它們。您可以使用 或 結(jié)合異步組件來(lái)實(shí)現(xiàn)這一點(diǎn)。

  4. 優(yōu)化資源:

  • 圖像:使用正確的格式(例如 WebP)、壓縮圖像、使用延遲加載(Nuxt.js 實(shí)際應(yīng)用:Vue.js 服務(wù)器端渲染框架)或使用 nuxt-圖像或 nuxt-picture 組件。

  • CSS:將 CSS 提取到單獨(dú)的文件并減少內(nèi)聯(lián)樣式。

  • JS:使用 Tree Shaking 刪除未使用的代碼。

  1. 異步數(shù)據(jù)預(yù)?。菏褂胊syncData或fetch方法預(yù)加載數(shù)據(jù),確保渲染前數(shù)據(jù)準(zhǔn)備就緒。

  2. 服務(wù)器端緩存:使用 nuxt-ssr-cache 模塊緩存服務(wù)器端渲染的結(jié)果,減少不必要的 API 調(diào)用。

  3. HTTP緩存:設(shè)置正確的緩存頭(如Cache-Control),使用瀏覽器緩存靜態(tài)資源。

  4. 路由守衛(wèi):使用 beforeRouteEnter 等路由守衛(wèi)以避免在不需要時(shí)加載數(shù)據(jù)。

  5. 減少 HTTP 請(qǐng)求:結(jié)合多個(gè) CSS 和 JS 文件,減少 HTTP 請(qǐng)求數(shù)量。

  6. 優(yōu)化API性能:優(yōu)化后端接口,減少響應(yīng)時(shí)間,使用分頁(yè)、過(guò)濾、緩存策略。

  7. 利用 CDN:在 CDN 上托管靜態(tài)資源,以加快全球用戶的加載速度。

  8. 優(yōu)化 Vuex 狀態(tài)管理:避免不必要的計(jì)算屬性和監(jiān)聽(tīng)器,以減少狀態(tài)更改的開(kāi)銷(xiāo)。

  9. 性能審計(jì):使用Lighthouse、Chrome DevTools或其他性能審計(jì)工具定期檢查應(yīng)用程序性能,并根據(jù)報(bào)告進(jìn)行改進(jìn)。

  10. Service Worker:如果適用,集成 PWA 功能并使用 Service Worker 進(jìn)行離線緩存和資源預(yù)加載。

  11. 模塊優(yōu)化:選擇高性能的第三方模塊,并確保它們針對(duì)SSR進(jìn)行了優(yōu)化。

以上是Nuxt.js 實(shí)際應(yīng)用:Vue.js 服務(wù)器端渲染框架的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

垃圾收集如何在JavaScript中起作用? 垃圾收集如何在JavaScript中起作用? Jul 04, 2025 am 12:42 AM

JavaScript的垃圾回收機(jī)制通過(guò)標(biāo)記-清除算法自動(dòng)管理內(nèi)存,以減少內(nèi)存泄漏風(fēng)險(xiǎn)。引擎從根對(duì)象出發(fā)遍歷并標(biāo)記活躍對(duì)象,未被標(biāo)記的則被視為垃圾并被清除。例如,當(dāng)對(duì)象不再被引用(如將變量設(shè)為null),它將在下一輪回收中被釋放。常見(jiàn)的內(nèi)存泄漏原因包括:①未清除的定時(shí)器或事件監(jiān)聽(tīng)器;②閉包中對(duì)外部變量的引用;③全局變量持續(xù)持有大量數(shù)據(jù)。V8引擎通過(guò)分代回收、增量標(biāo)記、并行/并發(fā)回收等策略優(yōu)化回收效率,降低主線程阻塞時(shí)間。開(kāi)發(fā)時(shí)應(yīng)避免不必要的全局引用、及時(shí)解除對(duì)象關(guān)聯(lián),以提升性能與穩(wěn)定性。

如何在node.js中提出HTTP請(qǐng)求? 如何在node.js中提出HTTP請(qǐng)求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請(qǐng)求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。1.使用內(nèi)置的http/https模塊無(wú)需依賴,適合基礎(chǔ)場(chǎng)景,但需手動(dòng)處理數(shù)據(jù)拼接和錯(cuò)誤監(jiān)聽(tīng),例如用https.get()獲取數(shù)據(jù)或通過(guò).write()發(fā)送POST請(qǐng)求;2.axios是基于Promise的第三方庫(kù),語(yǔ)法簡(jiǎn)潔且功能強(qiáng)大,支持async/await、自動(dòng)JSON轉(zhuǎn)換、攔截器等,推薦用于簡(jiǎn)化異步請(qǐng)求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基于Promise且語(yǔ)法簡(jiǎn)單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時(shí)復(fù)制副本,因此互不影響;引用類型如對(duì)象、數(shù)組和函數(shù)存儲(chǔ)的是內(nèi)存地址,指向同一對(duì)象的變量會(huì)相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問(wèn)題。理解這兩類差異有助于編寫(xiě)更穩(wěn)定可靠的代碼。

JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時(shí)間對(duì)象,某人構(gòu)建了一個(gè)eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開(kāi)發(fā)者們,大家好!歡迎閱讀本周的JavaScript新聞!本周我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時(shí)間對(duì)象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開(kāi)發(fā)者工具。讓我們開(kāi)始吧!Oracle與Deno的商標(biāo)之爭(zhēng)Oracle試圖注冊(cè)“JavaScript”商標(biāo)的舉動(dòng)引發(fā)爭(zhēng)議。Node.js和Deno的創(chuàng)建者RyanDahl已提交請(qǐng)?jiān)笗?shū),要求取消該商標(biāo),他認(rèn)為JavaScript是一個(gè)開(kāi)放標(biāo)準(zhǔn),不應(yīng)由Oracle

React與Angular vs Vue:哪個(gè)JS框架最好? React與Angular vs Vue:哪個(gè)JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個(gè)JavaScript框架最好?答案是根據(jù)需求選擇最適合的。1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級(jí)應(yīng)用和長(zhǎng)期維護(hù)的大項(xiàng)目;3.Vue上手簡(jiǎn)單,適合中小型項(xiàng)目或快速開(kāi)發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命周期及是否需要SSR也都是選擇框架的重要因素。總之,沒(méi)有絕對(duì)最好的框架,適合自己需求的就是最佳選擇。

立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) 立即在JavaScript中立即調(diào)用功能表達(dá)式(IIFE) Jul 04, 2025 am 02:42 AM

IIFE(ImmediatelyInvokedFunctionExpression)是一種在定義后立即執(zhí)行的函數(shù)表達(dá)式,用于變量隔離和避免污染全局作用域。它通過(guò)將函數(shù)包裹在括號(hào)中使其成為表達(dá)式,并緊隨其后的一對(duì)括號(hào)來(lái)調(diào)用,如(function(){/code/})();。其核心用途包括:1.避免變量沖突,防止多個(gè)腳本間的命名重復(fù);2.創(chuàng)建私有作用域,使函數(shù)內(nèi)部變量不可見(jiàn);3.模塊化代碼,便于初始化工作而不暴露過(guò)多變量。常見(jiàn)寫(xiě)法包括帶參數(shù)傳遞的版本和ES6箭頭函數(shù)版本,但需注意:必須使用表達(dá)式、結(jié)

什么是緩存API?如何與服務(wù)人員使用? 什么是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請(qǐng)求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。1.它允許開(kāi)發(fā)者手動(dòng)存儲(chǔ)如腳本、樣式表、圖片等資源;2.可根據(jù)請(qǐng)求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個(gè)緩存;4.通過(guò)ServiceWorker監(jiān)聽(tīng)fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用于離線支持、加快重復(fù)訪問(wèn)速度、預(yù)加載關(guān)鍵資源及后臺(tái)更新內(nèi)容;6.使用時(shí)需注意緩存版本控制、存儲(chǔ)限制及與HTTP緩存機(jī)制的區(qū)別。

處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 處理諾言:鏈接,錯(cuò)誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鏈?zhǔn)秸{(diào)用、錯(cuò)誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。1.鏈?zhǔn)秸{(diào)用通過(guò).then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個(gè).then()接收上一步結(jié)果并可返回值或Promise;2.錯(cuò)誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,并可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個(gè)完成即返回)和Promise.allSettled()(等待所有完成)

See all articles