You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS是否存在index.html模板?如何全局添加公共脚本?

在Next.js中全局添加脚本(以FontAwesome为例)

Next.js没有像纯React那样的public/index.html全局模板,但可以通过以下几种方式实现全局脚本注入,完全匹配你原来的需求:

1. Pages Router(Next.js 12及更早版本):用_document.js

_document.js是Next.js里自定义HTML文档结构的核心入口,作用等价于纯React的public/index.html。如果项目里还没有这个文件,直接在pages目录下创建:

import Document, { Html, Head, Main, NextScript } from 'next/document';

class MyDocument extends Document {
  render() {
    return (
      <Html>
        <Head>
          {/* 插入FontAwesome工具包脚本 */}
          <script src="https://kit.fontawesome.com/9999999999.js" crossorigin="anonymous" />
        </Head>
        <body>
          <Main />
          <NextScript />
        </body>
      </Html>
    );
  }
}

export default MyDocument;

这个脚本会被自动注入到所有页面的<head>标签中,和你之前在纯React里的操作效果完全一致。

2. App Router(Next.js 13+):用根layout.js

在App Router架构里,_document.js被弃用,全局布局由根目录下的app/layout.js负责。直接在这个文件的<head>区域添加脚本即可:

import './globals.css';

export default function RootLayout({ children }) {
  return (
    <html lang="zh-CN">
      <head>
        <script src="https://kit.fontawesome.com/9999999999.js" crossorigin="anonymous" />
      </head>
      <body>{children}</body>
    </html>
  );
}

3. 更灵活的方案:使用Next.js的Script组件

不管是Pages Router还是App Router,都可以用Next.js官方提供的Script组件加载全局脚本,它支持多种加载策略(提前加载、延迟加载等),能优化页面性能:

Pages Router在_app.js中使用:

import '../styles/globals.css';
import Script from 'next/script';

function MyApp({ Component, pageProps }) {
  return (
    <>
      <Script
        src="https://kit.fontawesome.com/9999999999.js"
        crossorigin="anonymous"
        strategy="beforeInteractive" // 页面交互前加载,适合全局依赖
      />
      <Component {...pageProps} />
    </>
  );
}

export default MyApp;

App Router在根layout.js中使用:

import './globals.css';
import Script from 'next/script';

export default function RootLayout({ children }) {
  return (
    <html lang="zh-CN">
      <body>
        <Script
          src="https://kit.fontawesome.com/9999999999.js"
          crossorigin="anonymous"
          strategy="beforeInteractive"
        />
        {children}
      </body>
    </html>
  );
}

选择建议:

  • 想要最贴近纯React修改index.html的体验,优先用_document.js(Pages Router)或根layout.js(App Router)直接插入脚本标签。
  • 追求加载性能和精细控制,就用Script组件。

内容的提问来源于stack exchange,提问作者Edvaldo Silva de Almeida Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:40:22