Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stackbit/sourcebit-target-hugo
A Sourcebit plugin for the Hugo static site generator
https://github.com/stackbit/sourcebit-target-hugo
gohugo headless headless-cms hugo sourcebit ssg
Last synced: about 1 month ago
JSON representation
A Sourcebit plugin for the Hugo static site generator
- Host: GitHub
- URL: https://github.com/stackbit/sourcebit-target-hugo
- Owner: stackbit
- License: mit
- Created: 2020-02-12T10:39:34.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-11-18T10:14:40.000Z (about 4 years ago)
- Last Synced: 2024-10-01T15:39:21.540Z (about 2 months ago)
- Topics: gohugo, headless, headless-cms, hugo, sourcebit, ssg
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/sourcebit-target-hugo
- Size: 95.7 KB
- Stars: 2
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# sourcebit-target-hugo
[![npm version](https://badge.fury.io/js/sourcebit-target-hugo.svg)](https://badge.fury.io/js/sourcebit-target-hugo)
> A [Sourcebit](https://github.com/stackbithq/sourcebit) plugin for the [Hugo](https://gohugo.io/) static site generator
## 👩🏫 Introduction
This plugin writes content from any Sourcebit data source into files compatible with the Hugo static site generator.
## 🏗 Installation
To install the plugin and add it to your project, run:
```
npm install sourcebit-target-hugo --save
```> 💡 You don't need to run this command if you start Sourcebit using the [interactive setup process](#%EF%B8%8F-interactive-setup-process), as the CLI will install the plugin for you and add it as a dependency to your project.
## ⚙️ Configuration
The plugin accepts the following configuration parameters. They can be supplied in any of the following ways:
- In the `options` object of the plugin configuration block inside `sourcebit.js`, with the value of the _Property_ column as a key;
- As an environment variable named after the _Env variable_ column, when running the `sourcebit fetch` command;
- As part of a `.env` file, with the value of the _Env variable_ column separated by the value with an equals sign (e.g. `MY_VARIABLE=my-value`);
- As a CLI parameter, when running the `sourcebit fetch` command, using the value of the _Parameter_ column as the name of the parameter (e.g. `sourcebit fetch --my-parameter`).| Property | Type | Visibility | Default value | Env variable | Parameter | Description |
| ------------------ | -------- | ---------- | ------------- | ------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fullAssetObjects` | Boolean | Public | `false` | | | By default, values of fields that reference assets will be written as a string containing just the asset URL. To get a full [asset object](https://github.com/stackbithq/sourcebit/wiki/Data-normalization#assets) instead, set `fullAssetObjects` to `true`. |
| `writeFile` | Function | Public | | | | A function that computes the files to be created, as well as their location, format and contents (see below for more details). |The `writeFile` function is invoked on each entry from the `objects` data bucket, with the following parameters:
- `entry` (Object): An entry from the `objects` data bucket
- `utils` (Object): An object containing utility methods:
- `slugify` (Function): Creates a filename-friendly version of any string (e.g. `utils.slugify('Hello, Sourcebit friends!') === 'hello-sourcebit-friends'`)The return value of this function determines whether the entry being evaluated will be written to a file and, if so, defines the path, the format and the contents of the file.
To write a file for an entry, the return value should be an object with a `content`, `format` and `path` properties. The nature of these properties may vary slightly based on the value of `format`, as shown in the table below.
| `format` | `content` | `path` | Description |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------- |
| `frontmatter-md` | Object containing a `frontmatter` and `body` properties, which will be written to the file's frontmatter and content body, respectively | The absolute path to the file. Must end with `.md`. | Writes a Markdown file with a YAML frontmatter. |
| `yml` | Object to be written as YAML | The absolute path to the file. Must end with `.yaml` or `.yml` | Writes a YAML file. |
| `json` | Object to be written as JSON | The absolute path to the file. Must end with `.json`. | Writes a JSON file |> 💡 If you wish to create multiple files for an entry, set the return value to an array of objects, each containing a `content`, `format` and `path` properties.
### 👀 Example configuration
_sourcebit.js_
```js
module.exports = {
plugins: [
{
module: require('sourcebit-target-hugo'),
options: {
writeFile: function(entry, utils) {
const { __metadata: meta, ...fields } = entry;if (!meta) return;
const { createdAt = '', modelName, projectId, source } = meta;
if (modelName === 'post' && projectId === '123456789' && source === 'sourcebit-source-contentful') {
const { __metadata, content, layout, ...frontmatterFields } = entry;return {
content: {
body: fields['content'],
frontmatter: { ...frontmatterFields, layout: fields['layout'] }
},
format: 'frontmatter-md',
path: 'content/posts/' + createdAt.substring(0, 10) + '-' + utils.slugify(fields['title']) + '.md'
};
}
}
}
}
]
};
```### 🧞♂️ Interactive setup process
This plugin offers an interactive setup process via the `npx create-sourcebit` command. It asks users to categorize each of the content models present in the `models` data bucket as a page or data object. For each model selected, the user is asked to define the location and the source of different frontmatter values.
## 📥 Input
This plugin expects the following data buckets to exist:
- `models`: An array of content models
- `objects`: An array of content entries## 📤 Output
This plugin creates files on disk, in locations and with formats defined by the `writeFile` function.