关于nextjs中next-sitemap插件生成文件样式丢失问题及自定义样式处理

nextjs-sitemap-generator:从nextjs页面生成sitemap.xml 我们正在寻找维护人员,因为我没有足够的时间来维护软件包。 请考虑为该项目的维护捐款。 用于Next.js项目的简单sitemap.xml映射器。 安装 要安装软件包,请在终端上执行以下操作: yarn add nextjs-sitemap-generator 如果您使用的是npm,则此操作如下: npm i --save-dev nextjs-sitemap-generator NextJs启动它自己的服务器来服务所有创建的文件。 但是还有另一个称为“选项,该选项使用文件来启动下一个服务器。 如果要使用此软件包,则必须创建服务器文件。 您可以在此处找到如何执行 已创建此模块以在NextJs 立即下载

现象没有默认样式
在这里插入图片描述
在这里插入图片描述
修改后
在这里插入图片描述
在这里插入图片描述
代码配置如下
next-sitemap.config.js如下

// const  { routing } = require('./src/i18n/routing') ;

const { flatten } = require('lodash')
const fs = require('fs');
const path = require('path');

// 改为硬编码locales值,与routing.ts保持一致
const locales = ['en', 'zh']
module.exports = {
  siteUrl: process.env.NEXT_PUBLIC_SITE_URL,
  changefreq: 'weekly',
  priority: 0.8,
  sitemapSize: 5000,
  // generateIndexSitemap: false,
  transform: async (config, path) => {
    // 👇 为所有分页文件添加 XSL 声明(包括分页和索引)
    return {
      loc: path,
      lastmod: config.autoLastmod ? new Date().toISOString() : undefined,
      xsl: '/sitemap-style.xsl'
    };
  },
  // 可选:自定义分页文件名格式
  filename: 'sitemap-[index].xml',
  autoLastmod: true, // 从页面文件的修改时间获取
  generateRobotsTxt: true,
  exclude: [
    '/404'
    // '/admin/*' // 通配符匹配路径
  ],
  robotsTxtOptions: {
    policies: [
      {
        userAgent: '*', // 所有爬虫
        allow: '/' // 允许所有路径
        // disallow: '/private', // 禁止特定路径
      }
    ],
    additionalSitemaps: [
      // process.env.NEXT_PUBLIC_SITE_URL + '/sitemap.xml' // 主站点地图
    ]
  },
  // 简化的formatOutput函数,专注于添加样式表引用
  formatOutput: (sitemapContent) => {
    console.log('formatOutput正在执行...');
    
    // 在XML声明后添加样式表引用
    const result = sitemapContent.replace(
      '<?xml version="1.0" encoding="UTF-8"?>',
      '<?xml version="1.0" encoding="UTF-8"?>\n<?xml-stylesheet type="text/xsl" href="/sitemap-style.xsl"?>'
    );
    
    console.log('formatOutput完成,已添加样式表引用');
    return result;
  },
  additionalPaths: async (config) => {
    const result = []
    result.push(
      locales.map((locale) => {
        return {
          loc: process.env.NEXT_PUBLIC_SITE_URL + `/${locale}`,
          changefreq: 'daily',
          priority: 1,
          lastmod: new Date().toISOString(),
          alternateRefs: locales
            .filter((targetLocale) => targetLocale === locale)
            .map((targetLocale) => ({
              href: process.env.NEXT_PUBLIC_SITE_URL + `/${targetLocale}`,
              hreflang: targetLocale,
              rel: 'alternate'
            }))
        }
      }) || []
    )
    const posts = await fetch(process.env.NEXT_PUBLIC_FETCH_URL + '**************').then((res) => res.json())
    posts?.data?.map((post) =>
      result.push(
        locales.map((locale) => {
          return {
            loc: process.env.NEXT_PUBLIC_SITE_URL + `/${locale}/${post.name.toLowerCase()}`,
            changefreq: 'weekly',
            priority: 0.8,
            lastmod: new Date().toISOString(),
            alternateRefs: locales
              .filter((targetLocale) => targetLocale === locale)
              .map((targetLocale) => ({
                href: process.env.NEXT_PUBLIC_SITE_URL + `/${targetLocale}/${post.name.toLowerCase()}`,
                hreflang: targetLocale,
                rel: 'alternate'
              }))
          }
        }) || []
      )
    )
    const allGames = await fetch(process.env.NEXT_PUBLIC_FETCH_URL + '**************').then((res) => res.json())
    allGames?.data?.map((post) =>
      result.push(
        locales.map((locale) => {
          return {
            loc: process.env.NEXT_PUBLIC_SITE_URL + `/${locale}` + '/game/' + `${post.slug}`,
            changefreq: 'monthly',
            priority: 0.8,
            lastmod: new Date().toISOString(),
            alternateRefs: locales
              .filter((targetLocale) => targetLocale === locale)
              .map((targetLocale) => ({
                href: process.env.NEXT_PUBLIC_SITE_URL + `/${targetLocale}` + '/game/' + `${post.slug}`,
                hreflang: targetLocale,
                rel: 'alternate'
              }))
          }
        }) || []
      )
    )
    return flatten(result)
  }
}

postbuild.js 处理样式

// 用于处理生成的sitemap文件
const fs = require('fs');
const path = require('path');

// 添加站点地图处理逻辑
function processSitemaps() {
  try {
    console.log('处理站点地图文件...');
    const publicDir = path.join(__dirname, 'public');
    
    // 确保样式文件存在于public目录
    const xslSourcePath = path.join(__dirname, 'sitemap-style.xsl');
    const xslDestPath = path.join(publicDir, 'sitemap-style.xsl');
    
    if (fs.existsSync(xslSourcePath)) {
      fs.copyFileSync(xslSourcePath, xslDestPath);
      console.log('已复制样式文件到public目录');
    } else {
      console.log('警告: 未找到sitemap-style.xsl文件');
    }
    
    // 处理所有站点地图文件
    const sitemapFiles = fs.readdirSync(publicDir)
      .filter(file => file.startsWith('sitemap') && file.endsWith('.xml'));
    
    console.log(`找到 ${sitemapFiles.length} 个站点地图文件`);
    
    for (const file of sitemapFiles) {
      const filePath = path.join(publicDir, file);
      let content = fs.readFileSync(filePath, 'utf8');
      
      if (!content.includes('<?xml-stylesheet')) {
        console.log(`处理文件: ${file}`);
        
        // 替换XML声明,添加样式表引用
        content = content.replace(
          '<?xml version="1.0" encoding="UTF-8"?>', 
          '<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/sitemap-style.xsl"?>'
        );
        
        fs.writeFileSync(filePath, content, {encoding: 'utf8'});
        console.log(`已更新文件: ${file}`);
      } else {
        console.log(`文件 ${file} 已有样式表引用,跳过`);
      }
    }
    
    console.log('站点地图处理完成');
  } catch (error) {
    console.error('处理站点地图文件时出错:', error);
  }
}

// 执行站点地图处理
processSitemaps();

sitemap-style.xsl 样式

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:html="http://www.w3.org/TR/REC-html40"
  xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
  xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"
  xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"
  xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0"
  xmlns:xhtml="http://www.w3.org/1999/xhtml">

  <xsl:output method="html" indent="yes" encoding="UTF-8"/>

  <xsl:template match="/">
    <html>
      <head>
        <title>
          <xsl:choose>
            <xsl:when test="//sitemap:sitemapindex">Sitemap Index</xsl:when>
            <xsl:otherwise>Sitemap</xsl:otherwise>
          </xsl:choose>
        </title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <style type="text/css">
          body {
            font-family: Arial, sans-serif;
            font-size: 14px;
            color: #333;
            background: #fff;
            margin: 0;
            padding: 20px;
          }
          h1 {
            color: #1a73e8;
            font-size: 24px;
            margin: 0 0 20px;
          }
          table {
            border-collapse: collapse;
            width: 100%;
            margin: 20px 0;
            border-radius: 6px;
            overflow: hidden;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
          }
          th {
            background-color: #1a73e8;
            color: #fff;
            text-align: left;
            padding: 12px 15px;
            font-weight: normal;
          }
          td {
            padding: 12px 15px;
            border-bottom: 1px solid #eee;
          }
          tr:hover td {
            background-color: #f5f5f5;
          }
          tr:last-child td {
            border-bottom: none;
          }
          a {
            color: #1a73e8;
            text-decoration: none;
          }
          a:hover {
            text-decoration: underline;
          }
          .url {
            max-width: 500px;
            word-break: break-all;
          }
          .count {
            text-align: center;
            font-weight: bold;
            color: #388e3c;
            font-size: 16px;
            padding: 10px 0;
          }
          .footer {
            margin-top: 20px;
            color: #666;
            font-size: 12px;
            text-align: center;
          }
        </style>
      </head>
      <body>
        <h1>
          <xsl:choose>
            <xsl:when test="//sitemap:sitemapindex">Sitemap Index</xsl:when>
            <xsl:otherwise>Sitemap</xsl:otherwise>
          </xsl:choose>
        </h1>

        <xsl:choose>
          <xsl:when test="//sitemap:sitemapindex">
            <!-- This is a sitemap index file -->
            <p>This file contains <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/> sitemaps.</p>
            <div class="count">Total Sitemaps: <xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/></div>
            <table>
              <tr>
                <th>Sitemap URL</th>
                <th>Last Modified</th>
              </tr>
              <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
                <tr>
                  <td class="url">
                    <a href="{sitemap:loc}"><xsl:value-of select="sitemap:loc"/></a>
                  </td>
                  <td>
                    <xsl:value-of select="sitemap:lastmod"/>
                  </td>
                </tr>
              </xsl:for-each>
            </table>
          </xsl:when>
          <xsl:otherwise>
            <!-- This is a sitemap file -->
            <p>This sitemap contains <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs.</p>
            <div class="count">Total URLs: <xsl:value-of select="count(sitemap:urlset/sitemap:url)"/></div>
            <table>
              <tr>
                <th>URL</th>
                <th>Priority</th>
                <th>Change Frequency</th>
                <th>Last Modified</th>
              </tr>
              <xsl:for-each select="sitemap:urlset/sitemap:url">
                <tr>
                  <td class="url">
                    <a href="{sitemap:loc}"><xsl:value-of select="sitemap:loc"/></a>
                  </td>
                  <td>
                    <xsl:value-of select="sitemap:priority"/>
                  </td>
                  <td>
                    <xsl:value-of select="sitemap:changefreq"/>
                  </td>
                  <td>
                    <xsl:value-of select="sitemap:lastmod"/>
                  </td>
                </tr>
              </xsl:for-each>
            </table>
          </xsl:otherwise>
        </xsl:choose>
<!--
        <div class="footer">
          <p>Generated by Next.js and next-sitemap</p>
        </div> -->
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

存放位置
next-sitemap.config.js和postbuild.js存放根目录,和package.json同级
sitemap-style.xsl和生成的sitemap.xml同一个位置,我放在public目录下

VLOOKUP_fixed.py 立即下载

相关推荐

D打卡签到,蓝牙中继,广播信号模拟器

模拟WIFI或蓝牙,有如下4种运行模式 1、WIFI模式:指定SSID、BSSID名称等,模拟WIFI,供设备连接。 2、蓝牙静态模式:指定MAC地址,广播固定的RAW数据。 3、蓝牙动态主机模式:扫描周围蓝牙设备,获取指定MAC地址的蓝牙及其RAW数据,实时发送至Cloud云端,可以设定时间段,只在设定的时间段内发送。 4、蓝牙动态从机模式:指定MAC地址,从Cloud云端获取动态主机模式实时上传的该MAC地址的RAW数据,并广播RAW数据。 准备工作: 1、板子:选择ESP32C3或ESP32C3 Supermini 2、nRF Connect手机app:用于扫描获取待模拟蓝牙设备的MAC和RAW数据。 Wifi分析仪或WiFi魔盒手机APP:用于扫描获取待模拟WIFI设备的SSID和BSSID。 3、可使用官方flash_download_tool_3.9.11工具来固件烧录。 使用说明: 上述完成后,设备首次上电,RESET一侧的指示灯会常亮,可以把它理解成电源指示灯; BOOT一侧的灯会亮,该灯常亮,表示设备开启了AP模式,此时设备会发射一个WIFI信号源,名称为ESPWIFI_AP,密码为12345678,手机或电脑连接该WIFI,浏览器输入192.168.4.1,进入设备的配置页面,进行相应的配置,其中动态主机模式和动态从机模式的SSID、Pwd 及要模拟的蓝牙MAC地址。配置完成并保存后,会重启,重启后设备会按照保存的配置运行。若下次要修改设备配置,可以长按BOOT按键,等待BOOT一侧的灯常亮,即进入AP模式,再按照上述流程配置即可。 仅用于蓝牙设备的开发与调试,请勿用于签到等违法违纪用途。

Next.js 实用小技巧

i18n 国际化 参考项目: https://github.com/vercel/next.js/tree/canary/examples/with-i18n-rosetta 首先,是本地 i18n目录下存储翻译文件,可以使用 js/ts/json/yaml 等格式。 这里以最复杂的 yaml 为例。 // i18n/index.ts import './index.d'; import zh from './zh.yml'; import en from './en.yml'; export defau

Willin Wang 的全栈升级指南 1025

YOLO26算法心电图十二导联目标检测+训练好的模型+368张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[导联I(I), 导联II(II), 导联III(III), 胸导联V1(V1), 胸导联V2(V2), 胸导联V3(V3), 胸导联V4(V4), 胸导联V5(V5), 胸导联V6(V6), 加压肢体导联aVF(aVF), 加压肢体导联aVL(aVL), 加压肢体导联aVR(aVR)] · 训练集:313 张 · 验证集:37 张 · 测试集:18 张 · 总计:368 张 该数据集聚焦于临床心电图信号的精准识别与定位,其核心检测目标为标准12导联心电图中的各个独立导联波形区域,涵盖肢体导联(I、II、III)与加压肢体导联(aVR、aVL、aVF),以及胸前导联(V1至V6),适用于心电图自动分析系统中对各导联位置的快速准确标注与分类。数据采集场景真实还原了医院心电图室或急诊监护环境下的标准心电图记录纸,波形清晰、基线稳定,具有高度临床参考价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 57 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9708** mAP50-95 | 0.6344 Precision | 0.8990 Recall | 0.9191 train/box_loss | 1.2231 train/cls_loss | 0.9703 val/box_loss | 1.2779 val/cls_loss | 0.... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

React+Next.js 搭建 SEO 友好型博客:JS 服务端渲染实战,谷歌收录率提升 90%

而谷歌等搜索引擎的爬虫虽然能执行部分 JS,但对于复杂的动态内容(如异步加载的博客文章、评论),抓取效率极低,甚至可能直接忽略未及时渲染的内容,导致大量优质文章 “隐形”,收录率往往不足 10%。结构化数据是谷歌推荐的 “增强型 SEO” 手段,通过特定格式的 JSON-LD 代码,向谷歌传递页面的结构化信息(如文章作者、发布时间、评论数),让搜索结果展示更丰富(如显示发布日期、作者名称),吸引用户点击的同时,提升谷歌对页面的信任度。具体优势体现在三个方面:​。针对博客内容,需注意:​。

2509_93051135的博客 1022

企业级AI助手平台 开箱即用的全栈AI平台,支持多智能体协同、Supervisor模式编排、多种决策模式、RAG技术和流程编排能力 支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化

企业级AI应用开发框架,支持多厂商大模型统一接入与管理,安全可控的企业知识库与高精度检索优化能力,提供可视化流程编排、自主决策智能体与多智能体协同调度,兼容主流 Agent Skill 协议,帮助企业与开发者零门槛快速构建安全、高效、可落地的AI智能体应用与行业解决方案。

Java低代码, 轻量级, 支持国产化 国密 AI大模型MCP服务 商业免费 包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流、Spring Cloud 微服务、AI大模型等

Java低代码, 轻量级, 支持国产化 国密 AI大模型MCP服务 商业免费 Spring Boot, MyBatis, Flowable, TypeScript, Vue, Antdv, 包括核心模块如:组织机构、角色用户、权限授权、数据权限、内容管理、工作流、Spring Cloud 微服务、AI大模型、代码生成器等

推荐使用:Next.js Sitemap Generator

推荐使用:Next.js Sitemap Generator 请注意:由于新出现的库提供了类似的功能,此项目已被标记为废弃。我们建议您考虑使用Next-Sitemap库。 1、项目简介 nextjs-sitemap-generator是一个专为Next.js项目设计的简单Sitemap生成器。它可以在你的自定义服务器中运行,只需在启动时调用一次,就能创建一个符合标准的sitemap.xml文件,帮...

gitblog_00046的博客 929

文创媒体电商行业智算中心(AIDC)建设规划方案.pptx

文创媒体电商行业智算中心(AIDC)建设规划方案.pptx

Next-Sitemap 项目安装与配置指南

Next-Sitemap 是一个专为 Next.js 项目设计的 Sitemap(站点地图)生成器,能够自动为所有静态、预渲染、动态和服务器端页面生成 Sitemap 和 robots.txt 文件。本文将详细介绍如何安装和配置 Next-Sitemap,帮助您快速上手并优化网站的 SEO(Search Engine Optimization,搜索引擎优化)表现。 ## 为什么需要 Next-S...

gitblog_00159的博客 462

集团企业数字化转型AI智能体平台规划及场景应用方案.pptx

集团企业数字化转型AI智能体平台规划及场景应用方案.pptx

基于动态窗口法DWA的机器人路径规划研究(Matlab代码实现)

内容概要:本文系统研究了基于动态窗口法(DWA)的机器人局部路径规划算法,深入剖析其在动态环境中实现自主避障与实时轨迹优化的核心机制。文章详细阐述了DWA算法的速度空间采样策略、轨迹预测模型、动力学约束处理及多目标代价函数的设计原理,并通过构建完整的Matlab仿真框架验证算法有效性。结合典型场景的仿真实验,展示了机器人在复杂障碍物环境下如何实时生成安全、平滑且符合运动学约束的最优路径,充分体现了DWA在移动机器人导航中的实用性与鲁棒性。; 适合人群:具备机器人运动规划基础知识和Matlab编程能力,从事智能移动机器人、自动驾驶或服务机器人研发的研究生、科研人员及工程技术人员。; 使用场景及目标:①深入理解DWA算法的理论基础与实现细节;②掌握机器人局部路径规划的仿真实现方法;③为实际机器人系统的导航模块开发提供可复用的算法原型与代码参考;④作为进一步研究高级导航算法(如TEB、MPC)的技术基础。; 阅读建议:建议结合提供的Matlab代码逐模块分析与调试,重点关注速度采样、轨迹积分、障碍物距离计算及代价评估等关键环节,通过调整参数在不同地图环境中进行对比实验,以深刻把握算法性能与参数之间的关系,进而提升对实时路径规划系统设计的理解与应用能力。

【亲测免费】 探索Next.js站点地图的未来 —— Next-Sitemap工具包

在当今数字化时代,网站的可发现性和搜索引擎优化(SEO)变得至关重要。为您的Next.js项目寻找一个高效且易于配置的站点地图生成解决方案吗?让我们一起深入了解开源界的明星——`next-sitemap`。 ## 项目介绍 `next-sitemap`是一个专为Next.js框架设计的插件,它简化了站点地图的自动化生成过程,为你的应用提供了一键式的SEO助力。通过简单的配置文件设置,你可以轻松...

gitblog_00037的博客 617

【轴承故障诊断】用于轴承故障诊断的集中时频分析研究(Matlab代码实现)

内容概要:本文系统研究了用于轴承故障诊断的集中时频分析技术,重点解决了传统时频分析方法在处理非平稳信号时存在的能量分散与分辨率不足等问题。通过引入集中时频分析方法,能够有效聚焦信号能量,精确提取轴承故障特征频率,提升故障识别的准确性与时效性。文章详细阐述了该方法的理论基础,并结合仿真信号与实际实验数据验证其优越性能,同时提供了完整的Matlab代码实现流程,涵盖信号预处理、时频变换、参数优化及结果可视化等环节,便于读者复现与拓展应用。; 适合人群:具备一定信号处理理论基础和Matlab编程能力的研究生、科研人员,以及从事机械设备状态监测、故障诊断与预测性维护工作的工程技术人员。; 使用场景及目标:①应用于电机、风机、齿轮箱等旋转机械的早期轴承故障检测,实现故障预警;②提升工业设备运维系统的智能化水平,支撑预测性维护体系构建;③作为高校或研究机构在信号处理、机械故障诊断等课程中的教学案例与实践素材。; 阅读建议:建议读者结合文中提供的Matlab代码逐段运行与调试,深入理解集中时频分布的生成机制及其关键参数(如核函数选择、平滑窗口大小)对诊断效果的影响,并尝试将其应用于其他类型的机械故障信号分析中,开展对比研究以深化对该方法适用性的认识。

Next.js-tailwindcss-blog-template故障排除:常见问题与解决方案大全

你是否在使用Next.js-tailwindcss-blog-template构建个人博客网站时遇到了各种问题?😅 作为一款基于Next.js、Tailwind CSS和Contentlayer/Velite的SEO优化博客模板,虽然功能强大,但在实际使用中难免会遇到一些技术难题。本文将为你提供完整的故障排除指南,解决你在使用这个Next.js博客模板时可能遇到的各种问题!🚀 ## 🔧 项

gitblog_00670的博客 675

【STM32】BLDC驱动&控制开发笔记 | 07_SPI通信测试 - STM32F407用SPI配置DRV8323驱动芯片

使用STM32F407的SPI通信功能配置DRV8323S驱动芯片的详细过程说明。

这里是 F菌的进阶之路。 6289

单细胞测序数据分析——细胞通讯 CellChat

cellchat

G2530051386的博客 1万+

BAML 官网前端工程指南:基于 Next.js 15 的营销站点架构与 BAML 集成实践

本文以 BAML 开源仓库(GitHub 加速计划 / ba / baml)中 [typescript2/app-website/CLAUDE.md](https://link.gitcode.com/i/26ca13025d6f5f9b5c830ab2771605f6) 为骨架,结合该目录下的真实源码与配置,系统讲解这个面向 AI 应用开发平台 BAML 的官方营销站点:从 Next.js 15

gitblog_00119的博客 185

机器学习预测材料性能:从特征工程到SHAP可解释性分析

机器学习在材料科学中的应用,核心在于将复杂的材料性能预测问题转化为数据驱动的建模任务。其基本原理是通过算法从历史数据中学习特征与目标属性之间的映射关系。这项技术的价值在于能够大幅加速新材料的发现与设计周期,降低传统“试错法”的高昂成本。在工程实践中,它广泛应用于预测如形成能、带隙、弹性模量以及居里温度等关键材料性能。具体到磁性材料领域,居里温度的准确预测对于永磁体和自旋电子器件设计至关重要。本项目深入探讨了如何利用特征工程从材料成分与结构中构建有效描述符,并借助SHAP这一可解释性工具,揭示模型决策背后的物

weixin_27155667的博客 650

Next.js 16 从入门到实战:一篇文章掌握全栈开发核心技术

Next.js 中间件在请求到达页面/API 之前执行,可以做路由拦截、重定向、设置 cookie 等操作。Server Actions 是 Next.js 提供的直接在客户端调用服务端函数的能力,不需要手动处理 HTTP 请求。本文通过一个完整的 Next.js 学习项目,涵盖了12 个核心知识点序号知识点核心要点1环境搭建2路由系统文件路由、动态路由、layout、loading、error3数据获取4API 路由GET/POST、NextResponse、错误处理5。

huihui_999的博客 263

具身智能端侧硬件选型实战:从算力需求到芯片对比与避坑指南

在边缘计算和嵌入式AI快速发展的今天,端侧智能设备的落地不再单纯比拼芯片的标称算力。TOPS数值只是初筛指标,真实的推理性能还受内存带宽、数据精度、稀疏性以及散热功耗等多重因素制约。理解不同视觉感知、决策规划与语言交互任务对算力的差异化需求,是选型的第一步。本文从技术原理出发,剖析了Jetson Orin、地平线征程、RK3588等主流平台的实测表现,并揭示了散热设计、供电链路与软件生态这三个极易被忽略的隐形瓶颈。通过完整的部署调优实录,展示了量化、缓存与电源模式优化如何提升端侧推理效率,为具身智能、无人车

weixin_29164185的博客 361

微信公众号开发实战:如何高效推送模板消息(附完整代码示例)

本文详细解析了微信公众号开发中模板消息推送的核心流程与实战技巧。文章从OpenID获取、模板申请、Access Token缓存管理到完整PHP代码实现,逐步拆解了高效推送模板消息的关键步骤,并提供了可直接复用的代码示例,帮助开发者快速集成这一提升用户体验的重要功能。

weixin_29009971的博客 792

2026年Next.js全栈AI编程助手实战评测:Mutable AI与DeepCode Studio深度对比

现代Web全栈开发已进入AI协同时代,核心不再局限于代码生成速度,而在于对Next.js App Router、TypeScript类型系统、SSG/SSR渲染语义及跨文件工程上下文的深度理解。本文基于真实编译错误、运行日志与调试耗时,解析AI编程助手如何准确识别路径语义(如app/api/route.ts)、推演Zod与Drizzle类型契约、维持middleware与layout的认证一致性,并实现错误驱动的自愈反馈。面向前端工程师、全栈学习者与技术决策者,提供可落地的AI协作生存指南与选型依据。

weixin_33795743的博客 333

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6574

【亲测免费】 如何使用 next-sitemap: 从零到一的全面指南

--- ## 项目介绍 **next-sitemap** 是一个专为 [Next.js](https://nextjs.org/) 应用设计的插件,它能够自动生成符合标准的 `sitemap.xml` 文件,帮助搜索引擎更好地索引你的网站内容。通过简单的配置,开发者可以确保搜索引擎抓取器了解整个站点的结构,从而提高网站在搜索结果中的可见性。 --- ## 项目快速启动 ### 安装 首...

gitblog_00329的博客 1019

求一个点到任意两个点所在直线距离 C#代码公式

求点C(X0,Y0) 到点A(x1,y1)和点B(x2,y2)所在直线的距离 1.已知任意两个点,求这两个点所在直线 已知点A(x1,y1),点B(x2,y2) 设直线上另外任意一个点为(x,y) 那么 (x-x1)/(y-y1) = (x2-x1)/(y2-y1); 整理后得方程: (y2-y1)x + (x1-x2)y + (y1-...

qq_29434987的博客 4492

【OpenClaw从入门到精通】第63篇:A股智能分析实战——用OpenClaw搭建个人量化研究助手(2026实测版)

2026年,OpenClaw已成为量化投研圈的现象级工具,八家头部券商密集发布专题研报力证其价值。传统量化投研面临技术门槛高、重复劳动多、策略迭代慢、非结构化数据处理弱四大痛点,而OpenClaw通过“AI智能体+金融Skill+量化API”的融合,实现了从数据获取、策略生成、回测验证到持仓监控的全流程自动化。本文基于2026年最新实测经验,完整呈现个人量化研究助手搭建:从阿里云部署、阿里云百炼API配置(含解析失败解决方案)、Tushare数据源接入,到PB-ROE价值选股、研报复现、自动化回测、持仓监控

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1058
上一篇: 浏览器复制图片
下一篇: react-lottie动画组件封装
殇蓝
博客等级 码龄10年 31粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值