Template: header
Template: markdown

Environments

Amagaki supports multiple build environments. You may want your templates – or
your content – to do different things depending on the current status of your
project. For example, you may want to show certain content in development or
staging only, or you may want to include or exclude content or functionality in
production.

Configuration

To set up different environments, first configure them in amagaki.js. In the
below example, we are configuring two environments (prod, and staging).
Environments accept arbitrary fields, allowing you to centrally manage global
data (such as API keys or other configuration) and easily change it depending on
the environment.

module.exports = function (pod) {
  pod.configure({
    environments: {
      prod: {
        host: 'example.com',
        fields: {
          apiKey: 'foo',
        },
      },
      staging: {
        host: 'example.com',
        fields: {
          apiKey: 'bar',
        },
      },
    },
  });
};

In templates

In templates, the pod.env variable is available. It returns the pod’s current environment. See Environment reference.

{{pod.env.name}}
{{pod.env.fields.apiKey}}
{% if pod.env.name == "prod" %}
<!-- Output prod stuff. -->
{% endif %}

In content

While this can be represented in template logic using an if statement like in
the above examples, changing content based on the environment is better
represented using the !IfEnvironment YAML type. See the example below:

foo: !IfEnvironment
  default: 'Hello World!'
  prod: ''

Defaults

  • When running the dev server, the environment dev is used.
  • When running amagaki build, the environment default is used.

Different environment names can be invoked during the serve or build
commands by using the --env <name> flag. For example, to build the prod
environment: amagaki build --env prod.

Template: footer