Turborepo

Handling platforms

Node.js versions

To account for Node.js versions, use the engines key in package.json. Turborepo will account for changes to this field and miss cache accordingly.

Operating systems, architecture, and other arbitrary conditions

For advanced use cases, you may want the operating system (OS), architecture, or other external factors to contribute to your hash.

1. Write an arbitrary file to disk

First, create a script that accounts for the hash contributors that you are interested in. For example, here is a Node.js script that identifies platform and architecture and writes those details to a file (turbo-cache-key.json):

./scripts/create-turbo-cache-key.js
#!/usr/bin/env node
 
const { writeFileSync } = require('fs');
const { join } = require('path');
 
const { platform, arch } = process;
const file = 'turbo-cache-key.json';
const str = JSON.stringify({ platform, arch });
console.log(`Generating cache key: ${str}`);
writeFileSync(file, str);

2. Add the file to your .gitignore

You won't want to commit this file to source control since it's dependent on environment. Add it to your .gitignore:

.gitignore
+ turbo-cache-key.json

3. Add the file to the hash

Now, make sure that turbo is aware of the file by adding it to task inputs. You can do this two ways:

./turbo.json
{
  "tasks": {
    "build-for-platforms": {
      "dependsOn": ["^build"],
      "inputs": ["$TURBO_DEFAULT$", "turbo-cache-key.json"]
    }
  }
}
./turbo.json
{
  "globalDependencies": ["turbo-cache-key.json"],
  "tasks": {
    ...
  }
}

4. Generate the file before running turbo

Last, you'll want to ensure that you run the script before running turbo. For example:

./package.json
{
  "scripts": {
    "build-for-platforms": "node ./scripts/create-turbo-cache-key.js && turbo run build"
  }
}

turbo run build will now take into account the contents of turbo-cache-key.json when calculating the hash for the build task.

hours

Total Compute Saved
Get started with
Remote Caching →

On this page