Nuxt3 的生命周期和鉤子函數(四)

来源:https://www.cnblogs.com/Amd794/p/18273139
-Advertisement-
Play Games

概述了Nuxt3的六個關鍵生命周期鉤子用途:modules:before至build:before,指導如何在應用初始化、模塊管理、配置解析、模板處理及構建前執行自定義操作,附帶實例代碼,強化Nuxt應用的靈活性和可控性。 ...



title: Nuxt3 的生命周期和鉤子函數(四)
date: 2024/6/28
updated: 2024/6/28
author: cmdragon

excerpt:
概述了Nuxt3的六個關鍵生命周期鉤子用途:modules:before至build:before,指導如何在應用初始化、模塊管理、配置解析、模板處理及構建前執行自定義操作,附帶實例代碼,強化Nuxt應用的靈活性和可控性。

categories:

  • 前端開發

tags:

  • Nuxt3
  • 生命周期
  • 鉤子函數
  • 模塊管理
  • 應用構建
  • 配置優化
  • 模板定製

image
image

掃碼關註或者微信搜一搜:編程智域 前端至全棧交流與成長

鉤子:modules:before

參數:

  • nuxtApp: Nuxt 應用實例,提供核心 API 和應用配置訪問。

環境:

  • 開發環境 (dev)
  • 生產環境 (prod)

描述:  modules:before 是 Nuxt.js 中的一個生命周期鉤子,它在應用初始化階段,且在安裝用戶自定義模塊之前被調用。這個鉤子允許開發者在模塊安裝前執行一些全局設置、數據準備或者進行必要的配置檢查。

詳細解釋:

用法示例

要使用 modules:before,你需要創建一個 Nuxt 插件(plugins文件夾內),並使用defineNuxtPlugin 函數來定義這個鉤子:

// plugins/my-plugin.js
export default defineNuxtPlugin((nuxtApp) => {
  // 在這裡編寫你的代碼
  nuxtApp.$emit('my-plugin-event', 'Before modules installation');

  // 例如,你可以設置全局變數或配置
  nuxtApp.config.globalProperties.$myPluginValue = 'Initial value';
});

案例演示

下麵是一個簡單的案例,展示瞭如何在 modules:before 鉤子中執行一些操作:

// plugins/my-plugin.js
export default defineNuxtPlugin((nuxtApp) => {
  // 檢查並設置全局變數
  if (!nuxtApp.config.someGlobalVariable) {
    nuxtApp.config.someGlobalVariable = 'Default value';
    console.log('Setting default global variable');
  }

  // 觸發一個自定義事件
  nuxtApp.$emit('my-plugin-event', 'Before modules');

  // 如果是開發環境,添加額外的調試信息
  if (process.env.NODE_ENV === 'development') {
    console.log('Running in development mode');
  }
});

在這個案例中,modules:before 鉤子確保了全局變數的存在,觸發了一個自定義事件,並根據環境提供不同的提示。這有助於確保模塊安裝前應用的狀態是正確的。

鉤子:modules:done

參數:

  • nuxtApp: Nuxt.js 應用實例,提供了與應用交互的介面。

環境:

  • Nuxt.js 初始化階段
  • 在所有用戶自定義模塊(plugins 或 custom modules)安裝並初始化後

描述:

modules:done 是 Nuxt.js 的生命周期鉤子之一,它在所有模塊(包括用戶定義的模塊和第三方模塊)安裝完成之後被調用。這個鉤子允許開發者在所有模塊都已經設置好之後執行一些後續操作,例如初始化某些功能或執行跨模塊的檢查。

詳細解釋與用法實例:

在 Nuxt 3 中,插件可以通過 defineNuxtPlugin 函數定義,併在其中使用 nuxtApp 實例的 $on 方法來監聽 modules:done 鉤子。以下是一個使用該鉤子的插件示例:

// plugins/my-plugin.js
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.hook('modules:done', () => {
    // 執行一些所有模塊安裝完成後的操作
    console.log('所有模塊已安裝完成!');
    // 這裡可以執行一些邏輯,比如初始化全局狀態或設置全局配置
  });
});

實戰案例demo:

以下是一個實戰案例,其中我們使用 modules:done 鉤子來確保所有模塊載入完成後,執行一個檢查所有模塊是否正確配置的函數。

// plugins/check-modules.js
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.hook('modules:done', async () => {
    // 檢查是否所有必須的模塊都已載入
    const requiredModules = ['@nuxtjs/axios', 'nuxt-i18n'];
    const loadedModules = nuxtApp.$options.nuxt.modules.map(module => module.name);

    const missingModules = requiredModules.filter(module => !loadedModules.includes(module));

    if (missingModules.length > 0) {
      console.error(`以下模塊未載入:${missingModules.join(', ')}`);
    } else {
      console.log('所有必須的模塊已載入!');
      // 如果所有必須的模塊都已載入,執行一些初始化操作
      // 例如,初始化API服務
      await nuxtApp.$axios.get('/api/initialize');
    }
  });
});

在這個案例中,我們定義了一個必須載入的模塊列表 requiredModules,然後在 modules:done 鉤子中檢查這些模塊是否已經載入。如果有缺失的模塊,我們會在控制臺中列印錯誤消息;如果所有模塊都已載入,我們將執行一些初始化操作,例如調用一個API來初始化應用程式。

鉤子:app:resolve

參數:

  • nuxtApp: Nuxt.js 應用實例,包含了應用的核心配置和功能。

環境:

  • Nuxt.js 初始化階段
  • 在 nuxtApp 實例解析完成之後調用

描述:

app:resolve 是 Nuxt.js 的一個生命周期鉤子,它在 Nuxt 應用實例解析完成,但可能還未完全初始化之前被調用。這個鉤子適合在應用的配置被解析後執行一些操作,比如修改預設配置、添加全局中間件等。

詳細解釋與用法實例:

在 Nuxt 3 中,你可以使用 defineNuxtPlugin 函數定義插件,併在 app:resolve 鉤子中進行配置修改。以下是一個簡單的例子:

// plugins/my-plugin.js
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.hook('app:resolve', (resolve) => {
    // 修改預設配置
    resolve.options.someGlobalOption = 'myCustomValue';

    // 添加全局中間件
    resolve.addMiddleware('myMiddleware', (to, from, next) => {
      console.log('Middleware executed before route change');
      next();
    });
  });
});

實戰案例demo:

在以下案例中,我們使用 app:resolve 鉤子來添加一個全局的全局頭部組件和修改路由守衛:

// plugins/global-config.js
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.hook('app:resolve', async (resolve) => {
    // 添加全局頭部組件
    resolve.options.headComponents = ['~/components/global-header.vue'];

    // 修改路由守衛
    resolve.options.router.beforeEach = (to, from, next) => {
      console.log('Before each route:', to, from);
      next();
    };
  });
});

在這個例子中,當 Nuxt 應用解析時,會自動添加全局頭部組件 global-header.vue,併在所有路由跳轉前執行我們自定義的路由守衛。這在全局配置或者需要在所有頁面共用的邏輯中非常有用。

鉤子:app:templates

參數:

  • nuxtApp: Nuxt.js 應用實例,包含了應用的核心配置和功能。

環境:

  • Nuxt.js 應用生成過程中
  • 在 NuxtApp 的模板文件被處理之前調用

描述:

app:templates 是 Nuxt.js 的一個生命周期鉤子,它允許開發者在 Nuxt 應用生成過程中自定義、修改或添加新的文件到構建目錄。這個鉤子可以用來添加自定義的模板文件,或者根據項目需求修改現有的模板。

鉤子:app:templatesGenerated

鉤子:build:before

餘下文章內容請點擊跳轉至 個人博客頁面 或者 掃碼關註或者微信搜一搜:編程智域 前端至全棧交流與成長,閱讀完整的文章:Nuxt3 的生命周期和鉤子函數(四) | cmdragon's Blog

往期文章歸檔:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 摘要:本文深入解析了Nuxt3框架中的多個核心生命周期鉤子和組件註冊功能,包括imports:sources、imports:extend、imports:context、imports:dirs、components:dirs及components:extend,通過實例代碼指導開發者如何在不同場... ...
  • ★ 背景說明 在瀏覽器環境中,由於安全性限制,不能直接將網路圖片地址轉換成 File 對象。File 對象是用戶在客戶端上傳文件時才能創建的,而不能由前端代碼直接將網路圖片地址轉換成 File 對象。 ★ 解決方案 如果你想要將網路圖片地址轉換成 Fie 對象,你需要先將圖片下載到客戶端,然後再將其 ...
  • 腳本化CSS 我們剛講過如何獲取和設置行內樣式的值,但是我們開發不會所有樣式都寫在行內,同時js沒法獲取內嵌樣式表和外部樣式表中的值. 事實上DOM提供了可靠的API,得到計算後的樣式。 1. 獲取計算樣式表 只讀,不可寫 獲取的值是計算後的絕對值,不是相對值 window.getComputedS ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 場景是用戶通過微信掃app內的收款碼,跳到一個h5頁面。然後完成支付。 代碼實現的整體流程: 使用微信掃碼,碼是app內生成的,碼的內容是一個h5頁面鏈接,掃碼完成後跳轉到自定義的h5支付界面。 掃碼進入後,將頁面展示所需要的參數進行緩存起來, ...
  • 摘要:本文詳細介紹了Nuxt3中的六個核心生命周期鉤子及其用法,包括build:done、build:manifest、builder:generateApp、builder:watch、pages:extend和server:devHandler:handler。內容涵蓋各鉤子的調用時機、參數、環... ...
  • 一.定時器 1. JS存在兩種定時器 setTimeout() 延遲定時器 setInterval() 迴圈定時器(“間隔器”) 定時器中的函數掛載在window對象,內部的this ——> window setTimerout(function(){ console.log('wuwei') }, ...
  • ‍ 寫在開頭 點贊 + 收藏 學會 近期產品期望在後臺發佈帖子或視頻時,需要添加 @用戶 的功能,以便用戶收到通知,例如“xxx在xxx提及了您!”。然而,現有的開源庫未能滿足我們的需求,例如 ant-design 的 Mentions 組件: 但是不難發現跟微信飛書對比下,有兩 ...
  • 前言 petite-vue 是為漸進增強而優化的另一種 Vue 發行版。它提供與標準 Vue 相同的模板語法和反應性心智模型。 不過,它專門針對在由伺服器框架呈現的現有 HTML 頁面上“散佈”少量交互進行了優化。 petite-vue,它在提供 vue 基本功能的同時,還能一個輕量級,簡單應用的微 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...