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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...