跳到主要内容
版本:3.5.2

静态资产

静态资产是直接复制到构建输出的非代码文件。它们包括图像、样式表、网站图标、字体等。

默认情况下,建议您将这些资产放在 static 文件夹中。您放入该目录中的每个文件都将复制到生成的 build 文件夹的根目录中,并保留目录层次结构。例如,如果您在静态文件夹中添加一个名为 sun.jpg 的文件,它将被复制到 build/sun.jpg 中。

这意味着

  • 对于站点 baseUrl: '/',图像 /static/img/docusaurus.png 将在 /img/docusaurus.png 上提供服务。
  • 对于站点 baseUrl: '/subpath/',图像 /static/img/docusaurus.png 将在 /subpath/img/docusaurus.png 上提供服务。

您可以在 docusaurus.config.js 中自定义静态目录源。例如,我们可以添加 public 作为另一个可能的路径

docusaurus.config.js
export default {
title: 'My site',
staticDirectories: ['public', 'static'],
// ...
};

现在,publicstatic 中的所有文件都将被复制到构建输出中。

引用您的静态资产

在 JSX 中

在 JSX 中,您可以使用绝对 URL 在代码中引用 static 文件夹中的资产,但这并非理想,因为更改站点 baseUrl 将会破坏这些链接。对于在 https://example.com/test 上提供的图像 <img src="/img/docusaurus.png" />,浏览器将尝试从 URL 根目录解析它,即作为 https://example.com/img/docusaurus.png,这将失败,因为它实际上在 https://example.com/test/img/docusaurus.png 上提供服务。

您可以 import()require() 静态资产(推荐),或使用 useBaseUrl 实用程序函数:两者都将 baseUrl 预先添加到您的路径中。

示例

MyComponent.js
import DocusaurusImageUrl from '@site/static/img/docusaurus.png';

<img src={DocusaurusImageUrl} />;
MyComponent.js
<img src={require('@site/static/img/docusaurus.png').default} />
MyComponent.js
import useBaseUrl from '@docusaurus/useBaseUrl';

<img src={useBaseUrl('/img/docusaurus.png')} />;

您还可以导入 SVG 文件:它们将被转换为 React 组件。

MyComponent.js
import DocusaurusLogoWithKeytar from '@site/static/img/docusaurus_keytar.svg';

<DocusaurusLogoWithKeytar title="Docusaurus Logo" className="logo" />;

在 Markdown 中

在 Markdown 中,您可以在 Markdown 语法中编写链接或图像时坚持使用绝对路径,因为 Docusaurus 将它们视为 require 调用而不是 URL,以便在解析 Markdown 时处理它们。请参阅 Markdown 静态资产

You write a link like this: [Download this document](/files/note.docx)

Docusaurus changes that to: <a href={require('static/files/note.docx')}>Download this document</a>
使用 Markdown 语法

Docusaurus 仅解析 Markdown 语法中的链接。如果您的资产引用使用 JSX 标签 <a> / <img>,将不会执行任何操作。

在 CSS 中

在 CSS 中,url() 函数通常用于引用字体和图像等资产。要引用静态资产,请使用绝对路径

@font-face {
font-family: 'Caroline';
src: url('/font/Caroline.otf');
}

static/font/Caroline.otf 资产将由捆绑程序加载。

重要要点

一个重要的要点:不要硬编码您的基本 URL!基本 URL 被认为是实现细节,应该易于更改。所有路径,即使它们看起来像 URL 片段,实际上都是文件路径。

如果您发现 URL 片段心理模型更容易理解,这里有一个经验法则

  • 在编写 JSX 时假装您有一个像 /test/ 这样的基本 URL,因此您不会使用像 src="/img/thumbnail.png" 这样的绝对 URL 路径,而是 require 资产。
  • 在编写 Markdown 或 CSS 时假装它是 /,因此您始终使用没有基本 URL 的绝对路径。

注意事项

请记住

  • 默认情况下,static 文件夹中的任何文件都不会被后处理、哈希或缩小。
    • 但是,正如我们在上面所演示的那样,我们通常能够将它们转换为 require 调用,以便它们确实得到处理。这对积极缓存和改善用户体验很有帮助。
  • 通过硬编码的绝对路径引用的丢失文件在编译时不会被检测到,并且会导致 404 错误。
  • 默认情况下,GitHub Pages 会将发布的文件通过 Jekyll 处理。由于 Jekyll 会丢弃任何以 _ 开头的文件,因此如果您使用 GitHub Pages 托管,建议您通过在 static 目录中添加一个名为 .nojekyll 的空文件来禁用 Jekyll。