naiveui 在 nuxt 中使用 css 资源首次未加载

ops/2024/11/27 21:09:55/

css__0">naiveui 在 nuxt 中使用 css 资源首次未加载

我真的被气死,最近在最 nuxt 开发,ui 库使用的是 naiveui 然后我使用的过程中发现每一次我刷新页面的时候我页面出现的时候都没有 css 样式但是过一会就出现了 css 样式,我真的被气死了,然后我查了好多资料,最后发现是 naiveui 的 ssr 的一个 bug,然后我找到了一个解决方法。

方法一

新建 plugins 文件

import { setup } from '@css-render/vue3-ssr'export default defineNuxtPlugin((nuxtApp) => {const { collect } = setup(nuxtApp.vueApp)useServerHead({style: () => {const stylesString = collect()const stylesArray = stylesString.split(/<\/style>/g).filter(style => style)return stylesArray.map((styleString) => {const match = styleString.match(/<style cssr-id="([^"]*)">([\s\S]*)/)if (match) {const id = match[1]return { 'cssr-id': id, children: match[2] }}return {}})}})
})

方法二

import { setup } from "@css-render/vue3-ssr";
import { defineNuxtPlugin, type NuxtSSRContext } from "#app";export default defineNuxtPlugin((nuxtApp) => {if (process.server) {const { collect } = setup(nuxtApp.vueApp);const originalRenderMeta = nuxtApp.ssrContext?.renderMeta;nuxtApp.ssrContext = nuxtApp.ssrContext || ({} as NuxtSSRContext);nuxtApp.ssrContext.renderMeta = () => {if (!originalRenderMeta) {return {headTags: collect(),};}const originalMeta = originalRenderMeta();if ("then" in originalMeta) {return originalMeta.then((resolvedOriginalMeta: any) => {return {...resolvedOriginalMeta,headTags: resolvedOriginalMeta["headTags"] + collect(),};});} else {return {...originalMeta,headTags: originalMeta["headTags"] + collect(),};}};nuxtApp.ssrContext.head = nuxtApp.ssrContext.head || ([] as typeof nuxtApp.ssrContext.head);nuxtApp.ssrContext.head.push({style: () =>collect().split("</style>").map((block) => {const id = RegExp(/cssr-id="(.+?)"/).exec(block)?.[1];const style = (RegExp(/>(.*)/s).exec(block)?.[1] ?? "").trim();return {"cssr-id": id,innerHTML: style,};}),});}
});

以上两个方法都可以解决 css 首次不加载的问题
在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/ops/137171.html

相关文章

Python 版本的 2024详细代码

2048游戏的Python实现 概述&#xff1a; 2048是一款流行的单人益智游戏&#xff0c;玩家通过滑动数字瓷砖来合并相同的数字&#xff0c;目标是合成2048这个数字。本文将介绍如何使用Python和Pygame库实现2048游戏的基本功能&#xff0c;包括游戏逻辑、界面绘制和用户交互。 主…

Transformer.js(五) — Tokenizer 分词器接口解析 - 数据输入的咀嚼器

在之前的文章 前端大模型入门&#xff1a;编码(Tokenizer)和嵌入(Embedding)解析 - llm的输入中&#xff0c;我简单对比了下tokenizer和splitter的区别&#xff0c;以及其功能&#xff0c;让大家对分词器有了初步的认识。本篇文章中&#xff0c;我将带领大家深入探讨 transform…

macOS上进行Ant Design Pro实战教程(一)

由于一个AI项目的前端使用了umi&#xff0c;本教程根据阿里官网上的 《Ant Design 实战教程&#xff08;beta 版&#xff09;》来实操一下&#xff0c;我使用macOS操作系统&#xff0c;VS Code 开发环境。 一、开发环境 1、安装nodejs, npm, yarn 官网上建议使用cnpm&#xf…

Spring Boot项目中,实体类是否需要实现Serializable接口

在Spring Boot项目中&#xff0c;实体类是否需要实现Serializable接口并不是一个硬性规定&#xff0c;而是取决于具体的应用场景和需求。以下是对这一问题的更详细分析&#xff1a; 1. 序列化的基本概念 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。反序列化则…

Vue学习记录11

模板引用 虽然Vue的声明性渲染模型抽象了大部分对DOM的直接操作&#xff0c;但在某些情况下&#xff0c;仍然需要直接访问底层DOM元素。要实现这一点&#xff0c;可以使用特殊的 ref attribute: <input ref"input"> ref是一个特殊的attribute,和 v-for中提到…

使用猴子补丁对pytorch的分布式接口进行插桩

训练脚本&#xff1a; from torchvision.datasets import MNIST from torchvision.transforms import ToTensor from torch import nn import torch import torch.distributed as dist from torch.nn.parallel import DistributedDataParallel as DDP from torch.utils.data.d…

RL78/G15 Fast Prototyping Board Arduino IDE 平台开发过程

这是一篇基于RL78/G15 Fast Prototyping Board的Arduino IDE开发记录 RL78/G15 Fast Prototyping Board硬件简介&#xff08;背景&#xff09;基础测试&#xff08;方法说明/操作说明&#xff09;开发环境搭建&#xff08;方法说明/操作说明代码结果&#xff09;Arduino IDE RL…

Java使用replaceAll替换时不使用正则表达式

前言 public String replaceAll(String regex, String replacement) {return Pattern.compile(regex).matcher(this).replaceAll(replacement);}在使用String.replaceAll() 方法时&#xff0c;由于入参时regex &#xff0c;而入参刚好是正则表达式的字符该怎么办&#xff1f;我…