Configure the public files folder
All the files that should be accessible by the browser must be in a root-level folder called public
.
Follow these instructions to configure the public
folder
for the following frameworks.
Eleventy
For Eleventy, you should do one of the following:
-
Add the
--output=public
flag in the Eleventy build commands, for example:npx @11ty/eleventy --input=path/to/sourcefiles --output=public
-
Add the following to your
.eleventy.js
file:// .eleventy.js module.exports = function(eleventyConfig) { return { dir: { output: "public" } } };
Astro
By default, Astro uses the public
folder to store static assets. For GitLab Pages,
rename that folder to a collision-free alternative first:
-
In your project directory, run:
mv public static
-
Add the following to your
astro.config.mjs
. This code informs Astro about our folder name remapping:// astro.config.mjs import { defineConfig } from 'astro/config'; export default defineConfig({ // GitLab Pages requires exposed files to be located in a folder called "public". // So we're instructing Astro to put the static build output in a folder of that name. outDir: 'public', // The folder name Astro uses for static files (`public`) is already reserved // for the build output. So in deviation from the defaults we're using a folder // called `static` instead. publicDir: 'static', });
SvelteKit
adapter-static
.When using adapter-static
, add the following to your svelte.config.js
:
// svelte.config.js
import adapter from '@sveltejs/adapter-static';
export default {
kit: {
adapter: adapter({
pages: 'public'
})
}
};
Next.js
Use the -o public
flag after next export
as the build command, for
example:
next export -o public
Nuxt.js
-
Add the following to your
nuxt.config.js
:export default { target: 'static', generate: { dir: 'public' } }
-
Configure your Nuxt.js application for Static Site Generation.
Vite
Update your vite.config.js
to include the following:
// vite.config.js
export default {
build: {
outDir: 'public'
}
}
Webpack
Update your webpack.config.js
to include the following:
// webpack.config.js
module.exports = {
output: {
path: __dirname + '/public'
}
};
Should you commit the public
folder?
Not necessarily. However, when the GitLab Pages deploy pipeline runs, it looks
for an artifact of that name.
If you set up a job that creates the public
folder before deploy, such as by
running npm run build
, committing the folder isn’t required.
If you prefer to build your site locally, you can commit the public
folder and
omit the build step during the job instead.