Home Manual Reference Source Test Repository

lib/config/config-example.js

const noopMiddleware = () => {};

module.exports = {
  // Site settings.
  // This is where you can put site-wide settings.
  // Any values placed here are globally accessible
  // from any template context via the `site` key.
  site: {
    title: 'My Reptar Title',
    email: 'your-reptar@email.com',
    description: "Your website's description goes here.\n",
    baseurl: '', // the subpath of your site, e.g. /blog
    url: 'http://yourdomain.com',
  },
  // Where things are.
  // If you have a unique layout for your site and want to
  // change where Reptar looks for certain files you can change
  // them here. All files are relative to where this file is found.
  path: {
    source: './',
    destination: './_site',
    templates: './_templates',
    data: './_data',
  },
  // Individual File configuration.
  file: {
    // What key from a File's frontmatter Reptar should use
    // as the property to grab the URL of the file from.
    urlKey: 'url',
    // The format that your date values are formatted as.
    // This is used when parsing date objects.
    // This current format supports dates like 2016-2-28
    // It uses moment.js under the head and its format syntax as well:
    // http://momentjs.com/docs/#/displaying/format/
    dateFormat: 'YYYY-M-D',
    // Apply frontmatter values to a File based upon a defined scope.
    // If the scope matches a File then the default values are applied if they
    // are not already set.
    defaults: [
      {
        // Any file in this path will have the default values applied.
        scope: { path: './' },
        values: { template: 'page', permalink: '/:title/' },
      },
      {
        // Any file in this path will have the default values applied.
        // Because this path is more specific it will over-write the previous
        // defaults.
        scope: { path: './_posts' },
        values: { template: 'post', permalink: '/:title/' },
      },
      {
        // Any file with this matching metadata will have the default values
        // applied.
        scope: { metadata: { draft: true } },
        values: { template: 'draft' },
      },
    ],
    // Filter out Files.
    filters: {
      // If any of the metadata values match then the File is filtered out.
      metadata: { draft: true },
      // If the date is in the future then it is filtered out.
      futureDate: {
        // Customize what key we should use to pull the date value from.
        key: 'date',
      },
    },
  },
  // This is where you configure your collections of content.
  // For more details refer to the Collections documentation.
  collections: {
    post: {
      path: './_posts',
      template: 'index',
      pageSize: 6,
      sort: { key: 'date', order: 'descending' },
      permalink: { index: '/', page: '/page/:page/' },
    },
    tag: {
      metadata: 'tags',
      template: 'tag',
      pageSize: 6,
      sort: { key: 'date', order: 'descending' },
      permalink: { index: '/tag/:metadata/', page: '/tag/:metadata/:page/' },
    },
  },
  // Configure how non-markdown files should be processed. This is primarily
  // for js, less, sass, etc files.
  //
  // Reptar will iterate over this array of asset processors and find the first
  // match using the `test` value, passing in the source file path.
  // If the test value is a:
  //  string: it compares the file path from the beginning of the string.
  //    Example:
  //      filePath = '/my/file.less', test: 'less' will not match.
  //      filePath = '/my/file.less', test: '/my/file' will match.
  //  RegExp: will run filePath.match(regExp) for a match.
  //  function: will give the function the filePath value and must return
  //    a boolean.
  //
  // The `use` value defines what object to use when processing the asset.
  // If the value for `use` is:
  //  string: Reptar will assume is an npm module and attempt to load it.
  //  object: The object must have two function properties,
  //    `calculateDestination` to define the destination path for an asset
  //    `render` to actually render the asset.
  assets: [
    {
      test: 'less',
      use: 'less',
    },
    {
      test: /\.js$/,
      use: 'browserify',
    },
    {
      test: /\.s[ac]ss$/,
      use: {
        calculateDestination(destination) {
          return destination.replace(/\.s[ac]ss$/, '.css');
        },
        render(filePath) {
          return filePath;
        },
      },
    },
  ],
  // If we should remove the compile destination folder before writing.
  cleanDestination: false,
  // Slug options.
  // Options passed to node-slug
  slug: { lower: true },
  // Markdown.
  // This lets you customize how markdown is handled.
  markdown: {
    // What file extensions we should recognize as a markdown file.
    extensions: ['markdown', 'mkdown', 'mkdn', 'mkd', 'md'],
    // Options given directly when creating our markdown parser.
    // Documentation here:
    // https://github.com/markdown-it/markdown-it//init-with-presets-and-options
    options: { preset: 'commonmark', highlight: true },
  },
  // Serving.
  // When running `reptar serve` what settings should be used.
  server: {
    port: 8080,
    host: '127.0.0.1',
    baseurl: '',
  },
  ignore: [
    // Ignore files named 'ignored_file.js'.
    'ignored_file.js',
    // Ignore any file prefixed with ``.
    /^_.+/,
    // Ignore any files that has ``.txt`` in it.
    filePath => filePath.indexOf('.txt'),
  ],
  // Only build files that have changed.
  // This is a performance improvement to the time it takes to build your site.
  incremental: true,
  // Where files created via `reptar new` should be placed.
  newFilePermalink: '/_posts/:date|YYYY-:date|MM-:date|D-:title.md',
  // What middlewares you want enabled and what configuration settings they
  // should have. Can be either a string which assumes it's an npm module or
  // a function which is the middleware itself, or an array of either.
  middlewares: ['reptar-excerpt', noopMiddleware],
  // Lifecycle methods are called at certain points in the lifecycle of Reptar.
  // Each value can be either a string or a function or an array of either.
  lifecycle: {
    willUpdate: noopMiddleware,
    didUpdate: noopMiddleware,
    willBuild: noopMiddleware,
    didBuild: noopMiddleware,
  },
};