@bolt/build-utils
Version:
Build-related utilities and helper scripts used in the Bolt Design System
279 lines (270 loc) • 10.9 kB
YAML
# Thanks to StencilJS (https://stenciljs.com/docs/stencil-config) for a little inspiration for some of these configuration names. Naming things is hard!
$schema: http://json-schema.org/draft-04/schema#
title: Bolt Build Tools
type: object
required:
- buildDir
- components
additionalProperties: false
properties:
namespace:
type: string
title: Namespace prefix to use in classnames
default: 'bolt'
lang:
type: array, string
title: Array of language-specific builds to generate. The 1st langugage specified is the default used for local development.
default:
- en
mode:
type: string
title: Switches which context the Bolt build process and component rendering behavior should be compiling for -- either in the browser context (ie. client-side rendering) or in a Node.js server context (server-side rendering). This config is used to toggle server-side rendering functionality on and off.
default: client
enum:
- client
- server
watch:
type: boolean
description: Configures internal tasks to watch for changes vs exiting when finished.
default: false
sourceMaps:
type: boolean
description: When set to true, generates sourcemaps when CSS and JS files are compiled.
default: true
i18n:
type: boolean
description: Should the design system's assets be compiled for multiple languages? Automatically defaults to false for local dev, true for prod.
port:
type: number
title: Desired port for Browsersync server
default: 3000
hostname:
type: string
title: Desired host for Browsersync Proxy
default: localhost
proxyPort:
type: number
title: Desired port for Webpack Proxy
proxyHostname:
type: string
title: Desired host for Webpack Proxy
proxyHeader:
type: string
description: Special request header when proxying Webpack's dev server
default: 'browsersync-proxy'
templatesDir:
type: array
title: Template paths being added
default:
- templates
copy:
type: array
description: The copy config is an array of objects specifying any files or folders that should get copied over to the build directory. Uses https://github.com/webpack-contrib/copy-webpack-plugin under the hood so any configuration options available there also apply here as well.
items:
type: object
properties:
from:
type: [string, object]
description: The files and/or directories to copy over
to:
type: [string, object]
description: The destination of the files being copied over
flatten:
type: boolean
description: Specify if any nested folders should get flattened down to a single level when copying over.
globalData:
type: object
properties:
js:
$ref: '#/definitions/globalJsData'
scss:
$ref: '#/definitions/globalSassData'
env:
type: string
title: Environment Type
description: What is being compiled? Pattern Lab? Drupal? A static site? Or is the new in-progress Progressive Web App (PWA) that combines Pattern Lab + the docs site into one single environment?
default: pwa
enum:
- pl
- static
- drupal
- pwa
- test
renderingService:
type: boolean
description: Automatically start up the PHP / Twig Rendering Service?
default: false
renderingServicePort:
type: number
title: Desired port for PHP Rendering Service
default: 8087
alterTwigEnv:
type: array
description: Extends and alters the PHP-based Twig environment used when compiling Twig templates. Used for adding custom Twig extensions + [configuring environment options](https://twig.symfony.com/doc/1.x/api.html#environment-options). Passed directly to the @basalt/twig-renderer config option of same name.
srcDir:
type: string
title: Source Directory
webpackStats:
type: boolean
title: Write WebPack stats file
description: Creates a [WebPack Stats Data file](https://webpack.js.org/api/stats/) called `webpack-stats.json` inside `buildDir`. Great for [this](http://webpack.github.io/analyse). Should probably run with `--prod`.
default: false
publicPath:
type: string
title: publicPath Directory
plConfigFile:
type: string
title: Pattern Lab Config File Path
buildDir:
type: string
description: The buildDir config specifies where Bolt's compiled files are saved after every build. These are the generated scripts which will be requested by the browser. The build directory should be relative to the wwwDir setting (i.e. inside it).
wwwDir:
type: string
title: Path to server root
description: "Where static files are served from. The wwwDir config specifies the public web distribution directory. This directory is commonly the root directory for a server, where all static files can be served. This directory is built and rebuilt directly from the source files. Note: We recommend this directory is not committed to a repository."
iconDir:
type: array
description: The iconDir config specifies from where Bolt will be taking svg for icons creation.
startPath:
type: string
title: Local server start path
description: This is the `path/to/file.html` in `http://localhost:3000/path/to/file.html`
default: '/'
ip:
type: string
title: IP address internally populated. Used for local dev testing w/ Webpack Dev Server.
webpackDevServer:
type: boolean, object
default: false
description: WebPack Dev Server related config
items:
enabled:
type: boolean
description: Enables WebPack Dev Server.
watchedExtensions:
type: array
description: Array of file extensions in the wwwDir that Webpack Dev Server will watch and trigger an HMR update when changed or added.
enableCache:
default: true
type: boolean
description: Caches the output from Webpack's build to significantly speed up the build tools after the first normal compile.
dataDir:
type: string
description: This is the directory where generated json data files exist with information about the overall build. Defaults to `data` inside `buildDir`
openServerAtStart:
type: boolean
default: false
description: If, after starting `npm start`, a Browser opens.
quick:
type: boolean
default: false
description: Try to be quicker by skipping some steps that might not be needed if everything is recently built and in good working order.
verbosity:
type: integer
default: 2
description: Logging level (Range of 0 to 5) How 'loud' or 'quiet' do you want the console output to be?
enum:
- 0
- 1
- 2
- 3
- 4
- 5
components:
type: object
properties:
global:
$ref: '#/definitions/components'
individual:
$ref: '#/definitions/components'
extraTwigNamespaces:
type: object
title: Extra Twig Namespaces
description: >-
You can add Twig Namespaces using this and it serves two purposes:
1. To add extra namespaces that have not been declared
2. To add extra paths to previously declared namespaces
Assuming we've already declared the `foo` namespaces to look in `~/my-dir1`.
Then someone uses `extraNamespaces` to declare that `foo` will look in `~/my-dir2`
This will not overwrite it, but *prepend* to the paths, resulting in a namespace setting like this:
```
'foo': {
paths: ['~/my-dir2', '~/my-dir1']
}
```
This causes the folder declared in `extraNamespaces` to be looked in first for templates, before our default; allowing end user developers to selectively overwrite some templates.
Follows the conventions from [this plugin](https://packagist.org/packages/evanlovely/plugin-twig-namespaces).
images:
type: object
description: Image resizing options, which can handle multiple sets.
properties:
sets:
type: array
items:
type: object
properties:
base:
type: string
description: The base path, which is combined with `glob` to indicate the source file. The directories used here will *not* be used to construct the output path.
glob:
type: string
description: The glob pattern, which can include plain directories, and is used to create the output path along with `dist`.
dist:
type: string
description: The output path, which is combined with what `glob` returns.
prod:
type: boolean
description: Production build, will compress assets.
default: false
schemaErrorReporting:
description: Setting for where schema errors should be reported. Note that reporting to cli will cause builds to fail if there are errors.
type: string
default: console
enum:
- none
- console
- cli
configureWebpack:
type: object
description: 'Passing in an object will merge any config customizations with the default Bolt Webpack config (via <a href="https://github.com/survivejs/webpack-merge" target="_blank" rel="noopener">webpack-merge</a>).'
configFileUsed:
type: string
description: The filepath to the `.boltrc` file used to load config. Programatically added to config.
definitions:
components:
type: array
items:
oneOf:
-
type: string
-
type: object
additionalProperties: false
properties:
name:
type: string
description: 'Becomes filename: NAME.css and NAME.js'
scss:
type: string
title: Entry file for Sass. Import statements will be followed
js:
type: string
title: Entry file for JS. Import statements will be followed
required:
- name
globalJsData:
type: array
uniqueItems: true
required:
- items
items:
type: string
description: '`.js` filename to pull in'
globalSassData:
type: array
uniqueItems: true
required:
- items
items:
type: string
description: '`.scss` filename to pull in'