apps/docs/content/docs/guides/handling-platforms.mdx
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.
For advanced use cases, you may want the operating system (OS), architecture, or other external factors to contribute to your hash.
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):
#!/usr/bin/env node
const { writeFileSync } = require("fs");
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);
You won't want to commit this file to source control since it's dependent on environment. Add it to your .gitignore:
+ turbo-cache-key.json
Now, make sure that turbo is aware of the file by adding it to task inputs. You can do this two ways:
inputs array of the task(s):{
"tasks": {
"build-for-platforms": {
"dependsOn": ["^build"],
"inputs": ["$TURBO_DEFAULT$", "turbo-cache-key.json"]
}
}
}
globalDependencies{
"globalDependencies": ["turbo-cache-key.json"],
"tasks": {
...
}
}
turboLast, you'll want to ensure that you run the script before running turbo. For example:
{
"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.