Help us learn about your current experience with the documentation. Take the survey.

GitLab Pages 公共文件夹

  • 层级:Free, Premium, Ultimate
  • 提供方式:GitLab.com, GitLab Self-Managed, GitLab Dedicated

按照以下说明为以下框架配置 public 文件夹

Eleventy

对于 Eleventy,您应该执行以下操作之一:

  • 在 Eleventy 构建命令中添加 --output=public 标志,例如:

    npx @11ty/eleventy --input=path/to/sourcefiles --output=public

  • 将以下内容添加到您的 .eleventy.js 文件中:

    // .eleventy.js
    module.exports = function(eleventyConfig) {
      return {
        dir: {
          output: "public"
        }
      }
    };

Astro

默认情况下,Astro 使用 public 文件夹存储静态资源。对于 GitLab Pages, 请先将该文件夹重命名为无冲突的替代名称:

  1. 在您的项目目录中,运行:

    mv public static
  2. 将以下内容添加到您的 astro.config.mjs。此代码通知 Astro 我们的文件夹名称重映射:

    // astro.config.mjs
    import { defineConfig } from 'astro/config';
    
    export default defineConfig({
      // GitLab Pages 要求暴露的文件位于名为 "public" 的文件夹中。
      // 因此我们指示 Astro 将静态构建输出放入该名称的文件夹中。
      outDir: 'public',
    
      // Astro 用于静态文件的文件夹名称(`public`)已经保留
      // 用于构建输出。因此与默认设置不同,我们使用了一个名为
      // `static` 的文件夹。
      publicDir: 'static',
    });

SvelteKit

GitLab Pages 仅支持静态站点。对于 SvelteKit, 您可以使用 adapter-static

使用 adapter-static 时,将以下内容添加到您的 svelte.config.js 中:

// svelte.config.js
import adapter from '@sveltejs/adapter-static';

export default {
  kit: {
    adapter: adapter({
      pages: 'public'
    })
  }
};

Next.js

GitLab Pages 仅支持静态站点。对于 Next.js,您可以使用 Next 的 静态 HTML 导出功能

随着 Next.js 13 的发布,Next.js 的工作方式发生了很大变化。 建议使用以下 next.config.js 以便正确导出所有静态资源:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  images: {
    unoptimized: true,
  },
  assetPrefix: "https://example.gitlab.io/namespace-here/my-gitlab-project/"
}

module.exports = nextConfig

一个 .gitlab-ci.yml 示例可以简化为:

create-pages:
  before_script:
    - npm install
  script:
    - npm run build
    - mv out/* public
  pages: true  # 指定这是一个 Pages 作业并发布默认的公共目录

上述 YAML 示例使用了用户定义的作业名称

Nuxt.js

GitLab Pages 仅支持静态站点。

默认情况下,Nuxt 使用 public 文件夹存储静态资源。对于 GitLab Pages,请先将 public 文件夹重命名为无冲突的替代名称:

  1. 在您的项目目录中,运行:

    mv public static
  2. 将以下内容添加到您的 nuxt.config.js 中:

    export default {
      target: 'static',
      generate: {
        dir: 'public'
      },
      dir: {
        // Nuxt 用于静态文件的文件夹名称(`public`)已经
        // 保留用于构建输出。因此与默认设置不同,我们
        // 使用了一个名为 `static` 的文件夹。
        public: 'static'
      }
    }
  3. 为您的 Nuxt.js 应用程序配置 静态站点生成

Vite

更新您的 vite.config.js 以包含以下内容:

// vite.config.js
export default {
  build: {
    outDir: 'public'
  }
}

Webpack

更新您的 webpack.config.js 以包含以下内容:

// webpack.config.js
module.exports = {
  output: {
    path: __dirname + '/public'
  }
};

是否应该提交 public 文件夹?

不一定。但是,当 GitLab Pages 部署管道运行时,它会查找 同名 artifact。 如果您设置了一个在部署前创建 public 文件夹的作业,例如通过 运行 npm run build,则不需要提交该文件夹。

如果您更喜欢在本地构建站点,您可以提交 public 文件夹, 并在作业中省略构建步骤。