Builds are a step of deployments that transform sources into production ready outputs. Builds result in either Static Files, or Lambdas (which execute code and serve a dynamic response for every request).
Builds are defined in the now.json
configuration file using the builds
property:
{ "builds": [{ "src": "*.js", "use": "@now/node" }] }
The above example instructs Now to consider all files with a .js
extension (the pattern is defined in the src
property) and pass them to an npm module named @now/node
.
This @now/node
module is called a Builder.
Builders take in all the files matched by the src
property and transform those source files to a production-ready output.
Sources and Outputs
Sources are files that already exist in your project before deploying and can be used to define the output.
Outputs are files that are used for the deployment. The output can be either a list of static files, Lambdas, or of both. The output is defined entirely by which, if any, Builder is used.
When deploying with Now, if your project has no now.json
file, or has one but no builds
property defined, the projects source files will be deployed directly as the output.
However, if you define a builds
step, Now will only include the outputs that the Builders produce in the resulting deployment.
builds
defined, to avoid serving unintended files to the public.Configuration
Creating a now.json
file in a project, as mentioned above, will allow Now deployments to utilise the source and create a production-ready output through the builds
property.
The builds
property is an array that contains Build steps, consisting of at least a src
and a use
property.
The files matched by the src
property, as a glob, defined in the Build object of the builds
property are called the source. The output is what gets generated by a Builder which can consist of:
- Static Files - Files that are immediately available without any invocation of code.
- Lambdas - Serverless functions that are invoked upon request and serve a dynamic response.
The Builder responsible for handling the source is defined in the use
property, within a build
step of the builds
array.
Builders
The driving force behind the Builds step of Now are the Builders. Each Builder takes the source it is given and produces an output, depending on the purpose of the builder.
Official Builders
To get you started with your project quickly and easily, we have made a set of official Builders. You can find the full list of official builders in the sidebar to the left.
Creating a Builder
If you would like to learn how to create a custom Builder, follow the Builder Developer Guide.
Parallelization
Every file matched by the src
property (mentioned above) will trigger a new Build. All of those Builds are going to run in parallel after the deployment is created.
This means that each Builder defined in the builds
property will run asynchronously of each other and produce their intended output without being blocked on a thread.
Ultimately, the build step will produce the output much faster than running the Builds in series.
Build Environment Variables
Environment variables can be passed to builds in the now.json
configuration file via a build.env
property.
Limits
Build Sources Limit
With the exception of the use of the @now/static
Builder – which simply allows you to move static files to the final deployment – when other Builders are in use in a configuration, Builds usage has limits based on the number of targeted source files overall for the account or team.
These limitations are based on which type of plan your account or team has:
- On the Free plan, there is a limit of 32 build sources per hour and 100 build sources per day.
- On the Unlimited plan, there is a limit of 512 build sources per hour and 3000 build sources per day.
To visualize this, take the following examples:
With a project that has 512 JavaScript files that are targeted by the @now/node
Builder in a build step within a now.json
configuration file (with no other build steps), the deployment will be accepted but another will not be possible for an hour.
If that same project adds a build step to target a single Go file with the @now/go Builder, making the total sources equal 513 files, the deployment will fail as it would reach the limit of build sources.
Builds Timeout
If a Build is in progression for 30 minutes, the Build will timeout and throw an error.