Repo
Docs
API Reference
Codemods

Turborepo Codemods

Turborepo provides Codemod transformations and automatic migration scripts to help upgrade your Turborepo codebase when a feature is deprecated.

Codemods are transformations that run on your codebase programmatically. This allows for a large amount of changes to be applied without having to manually go through every file.

Usage

npx @turbo/codemod <transform> <path>
  • transform - name of transform, see available transforms below.
  • path - files or directory to transform
  • --dry - Do a dry-run, no code will be edited
  • --print - Prints the changed output for comparison

Turborepo 1.x

add-package-manager

Transforms the root package.json so that packageManager key as the detected package manager (yarn, npm, pnpm) and version (e.g. yarn@1.22.17). This key is now supported by Node.js (opens in a new tab) and is used by Turborepo for faster package manager detection (vs. inferring from just the filesystem alone).

For example, for Yarn v1:

// Before
{
  "name": "turborepo-basic",
  "version": "0.0.0",
  "private": true,
  "workspaces": ["apps/*", "packages/*"]
  // ...
}
{
  "name": "turborepo-basic",
  "version": "0.0.0",
  "private": true,
+  "packageManager": "yarn@1.22.17",
  "workspaces": [
    "apps/*",
    "packages/*"
  ]
}

Usage

Go to your project:

cd path-to-your-turborepo/

Run the codemod:

npx @turbo/codemod add-package-manager

create-turbo-config

Creates the turbo.json file at the root of your project based on the "turbo" key in package.json. The "turbo" key is subsequently deleted from package.json.

For example:

// Before, package.json
{
  "name": "Monorepo root",
  "private": true,
  "turbo": {
    "pipeline": {
      ...
    }
  },
  ...
}
// After, package.json
{
  "name": "Monorepo root",
  "private": true,
-  "turbo": {
-    "pipeline": {
-      ...
-    }
-  },
  ...
}
 
// After, turbo.json
+{
+  "$schema": "https://turbo.build/schema.json",
+  "pipeline": {
+    ...
+  }
+}

Usage

Go to your project:

cd path-to-your-turborepo/

Run the codemod:

npx @turbo/codemod create-turbo-config

migrate-env-var-dependencies

Migrates all environment variable dependencies in turbo.json from dependsOn and globalDependencies to env and globalEnv respectively.

For example:

// Before, turbo.json
{
  "$schema": "https://turbo.build/schema.json",
  "globalDependencies": [".env", "$CI_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build", "$API_BASE"],
      "outputs": [".next/**"]
    },
    "lint": {
      "outputs": []
    },
    "dev": {
      "cache": false
    }
  }
}
// After, turbo.json
{
  "$schema": "https://turbo.build/schema.json",
- "globalDependencies": [".env", "$CI_ENV"],
+ "globalDependencies": [".env"],
+ "globalEnv": ["CI_ENV"],
  "pipeline": {
    "build": {
-     "dependsOn": ["^build", "$API_BASE"],
+     "dependsOn": ["^build"],
+     "env": ["API_BASE"],
      "outputs": [".next/**"],
    },
    "lint": {
      "outputs": []
    },
    "dev": {
      "cache": false
    }
  }
}

Usage

Go to your project:

cd path-to-your-turborepo/

Run the codemod:

npx @turbo/codemod migrate-env-var-dependencies
Last updated on 2022-11-12T21:10:37.000Z