Preprocessors
Preprocessors do things like optimization and code generation against your pod's source files. Grow runs preprocessors every time affected source files change, allowing you to "save and refresh" to preview your changes. Preprocessors are also run at build time.
Grow includes the below preprocessors as built-ins with the SDK, and you'll always be free to bring your own external processing tools (such as Gulp).
Global settings
By default, preprocessors run when the development server is started and when
your site is built. You can control preprocessor execution by using the
autorun
parameter and optionally by using the name
parameter.
preprocessors: - name: my_preprocessor kind: <kind> autorun: false tags: - red - blue
A preprocessor with the above configuration will only be run when using grow preprocess -A
or when using grow preprocess -p my_preprocessor
. This can be handy to control how often a data-importing preprocessor (such as Google Sheets or Google Docs importers) run. You may not want to run those preprocessors each time your site is built.
Kinds
Google Docs
The Google Docs preprocessor downloads a Google Doc and saves it to a data file within your pod. It can optionally convert the Google Doc to Markdown, ready for use with the markdown
filter in templates. Specifying an .md
file extension for the path
parameter will convert the output to Markdown.
After enabling this preprocessor, when you run the grow build
command, you will be prompted (once on the command line) to authorize Grow to read your Google Drive files.
preprocessors: - kind: google_docs path: /data/filename.{html|md} # Where to save downloaded file. id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI # File ID. convert: true # Whether to convert the file to Markdown.
Google Sheets
The Google Sheets preprocessor downloads data from a Google Sheet and saves it to a data file within your pod. The data can then be consumed by the g.csv
tag, for example, in templates.
After enabling this preprocessor, when you run the grow build
command, you will be prompted (once on the command line) to authorize Grow to read your Google Drive files.
Grow will export data from Google Sheets as either JSON or CSV, depending on the extension used in the path
field.
preprocessors: - kind: google_sheets path: /content/data/filename.{csv|json|yaml} # Where to save the downloaded file. id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI # Spreadsheet ID. gid: 0 # Worksheet ID (optional). output_style: {compressed|pretty} # Whether to compress or pretty print JSON-formatted docs (default: compressed).
By default, Grow treats Google Sheets data as a list. Optionally, the data can be treated as a map and reformatted appropriately. This can be useful for binding a Google Sheet to a content document. Field names beginning with #
are ignored when downloaded.
The preserve
option can be set to builtins
to preserve any existing builtin fields in the document (fields whose names begin with $
).
preprocessors: - kind: google_sheets path: /content/pages/file.yaml id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI format: map preserve: builtins
Optionally, data can be saved to a specific key within a YAML document, rather than overwriting an entire document. In the following example, a Google Sheet is downloaded and the faq
key within /content/pages/page.yaml
is updated with a list of data.
preprocessors: - kind: google_sheets path: /content/pages/page.yaml:faq id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI
Spreadsheets can also be imported as a collection into Grow. Each sheet will be imported as a separate yaml file that maps the first column to the second column.
preprocessors: - kind: google_sheets collection: /content/strings/ id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI
An alternative to the map
format is the string
format which will is the same as the map
except it appends a @
to the key name to mark the string for translation.
preprocessors: - kind: google_sheets collection: /content/strings/ id: 1ZhJshmT2pZq_IALA6leXJ0oRuKVO12N9BbjAarAT8kI format: string
Gulp
The Gulp preprocessor simplifies using Gulp in conjunction with Grow. Instead of running Gulp and Grow separately, Grow can manage Gulp as a subprocess and run different Gulp tasks at build and run time.
Typically, you would pair grow run
with a Gulp task that watches for changes and rebuilds static assets; and you would pair grow build
with a Gulp task that builds static assets for release. You can use the build_task
and run_task
options to control the Gulp task that is run for these two Grow commands.
preprocessors: - kind: gulp build_task: "build" # Task to run at build time (optional). run_task: "" # Task to run when the development server runs (optional).