Packages

@turbo/codemod

Turborepo 提供代码转换和自动迁移脚本来帮助升级您的 Turborepo 代码库

turbo-codemod

Turborepo 提供代码转换(codemod)和自动迁移脚本,以帮助在功能被弃用时升级您的 Turborepo 代码库。

代码转换(Codemods)是以编程方式在您的代码库上运行的转换。这允许应用大量更改,而无需手动管理重复性更改。

使用方法

首先,确保您已运行包管理器的安装命令。

npx @turbo/codemod [transform] [path] [--dry] [--print]
  • transform - 转换名称,请参阅下面的可用转换。
  • path - 要转换的文件或目录
  • --dry - 执行试运行(代码不会被编辑)
  • --print - 打印更改的输出以进行比较

升级 Turborepo 版本

在大多数情况下,您可以运行:

npx @turbo/codemod

所有您需要升级的代码转换都将为您运行。

Turborepo 2.x

以下代码转换用于 Turborepo 第二个主要版本的迁移路径。

update-schema-json-url (2.0.0)

将版本化的 schema.json URL 更新为 v2。

npx @turbo/codemod update-schema-json-url

示例

{
- "$schema": "https://turborepo.com/schema.v1.json",
+ "$schema": "https://turborepo.com/schema.v2.json",
}

add-package-names (2.0.0)

为任何没有名称的包在 package.json 中添加名称。

npx @turbo/codemod add-package-names

示例

{
+ "name": "@repo/ui",
}

clean-globs (2.0.0)

修复由于 turbo 中 glob 处理更改而无效的 glob 模式。

npx @turbo/codemod clean-globs

示例

{
  "tasks": {
    "build": {
      "outputs": [
        // Collapse back-to-back doublestars
-         "**/**.ext", // [!code highlight]
+         "**.ext" // [!code highlight]
        // Ensure a file extension does not have a double-star
-         "**.ext", // [!code highlight]
+         "**/*.ext" // [!code highlight]
        // Proper expansion of directory names
-         "prefix**/", // [!code highlight]
+         "prefix*/**" // [!code highlight]
      ]
    }
  }
}

migrate-dot-env (2.0.0)

.env 文件从已移除的 dotEnv 键移动到 inputs

npx @turbo/codemod migrate-dot-env

示例

{
  "tasks": {
    "build": {
-       "dotEnv": [".env"], // [!code highlight]
      "inputs": [
        "dist/**",
+         ".env" // [!code highlight]
      ],
    }
  }
}

rename-output-mode (2.0.0)

outputMode 键重命名为 outputLogs

npx @turbo/codemod rename-output-mode

示例

{
  "tasks": {
    "build": {
-     "outputMode": "errors-only" // [!code highlight]
+     "outputLogs": "errors-only" // [!code highlight]
    }
  }
}

rename-pipeline (2.0.0)

pipeline 键重命名为 tasks

npx @turbo/codemod rename-pipeline

示例

{
- "pipeline": {
+ "tasks": {
    "build": {
      ...
    },
    "dev": {
      ...
    },
    "lint": {
      ...
    }
  }
}

stabilize-ui (2.0.0)

turbo.json 中的 experimentalUI 键重命名为 ui

npx @turbo/codemod stabilize-ui

示例

{
- "experimentalUI": true
+ "ui": true
}

Turborepo 1.x

以下代码转换用于 Turborepo 第一个主要版本的迁移路径。

stabilize-env-mode (1.10.0)

turbo.jsonexperimentalGlobalPassThroughEnv 迁移到 globalPassThroughEnv,将 experimentalPassThroughEnv 迁移到 passThroughEnv

npx @turbo/codemod stabilize-env-mode

示例

{
  "$schema": "https://turborepo.com/schema.json",
- "experimentalGlobalPassThroughEnv": ["CC"],
+ "globalPassThroughEnv": ["CC"],
  "pipeline": {
    "build": {
-     "experimentalPassThroughEnv": ["GOROOT"],
+     "passThroughEnv": ["GOROOT"],
    }
  }
}

transform-env-literals-to-wildcards (1.10.0)

更新任何现有环境变量字段,其内容对新的通配符语法来说是模糊的。

npx @turbo/codemod transform-env-literals-to-wildcards

示例

{
  "$schema": "https://turborepo.com/schema.json",
- "globalEnv": ["THIS_*_IS_LITERAL"],
- "globalPassThroughEnv": ["!LITERAL_LEADING_EXCLAMATION"],
+  "globalEnv": ["THIS_\\*_IS_LITERAL"],
+  "globalPassThroughEnv": ["\\!LITERAL_LEADING_EXCLAMATION"],
  "pipeline": {
    "build": {
-     "env": ["50_PERCENT_OFF*_HAS_SMALL_PRINT"],
-     "passThroughEnv": ["**BOLDED**"],
+     "env": ["50_PERCENT_OFF\\*_HAS_SMALL_PRINT"],
+     "passThroughEnv": ["\\*\\*BOLDED\\*\\*"],
    }
  }
}

set-default-outputs (1.7.0)

迁移 turbo.json 输出以包含先前推断的 dist/**build/**

npx @turbo/codemod set-default-outputs

示例

{
  "$schema": "https://turborepo.com/schema.json",
  "globalDependencies": [".env"],
  "globalEnv": ["CI_ENV"],
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "env": ["API_BASE"],
      "outputs": [".next/**", "!.next/cache/**"]
    },
-   "lint": {
-     "outputs": []
-    },
+   "lint": {},
    "dev": {
      "cache": false,
      "persistent": true,
+     "outputs": ["dist/**", "build/**"]
    }
  }
}

migrate-env-var-dependencies (1.5.0)

turbo.json 中的所有环境变量依赖项分别从 dependsOnglobalDependencies 迁移到 envglobalEnv

npx @turbo/codemod migrate-env-var-dependencies

示例

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

add-package-manager (1.1.0)

转换根目录 package.json,使 packageManager 键作为检测到的包管理器(yarnnpmpnpm)和版本(例如 yarn@1.22.17)。此键现在受 Node.js 支持,Turborepo 使用它来更快地检测包管理器(相对于仅从文件系统推断)。

npx @turbo/codemod add-package-manager

示例

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

create-turbo-config (1.1.0)

基于 package.json 中的 "turbo" 键在项目根目录创建 turbo.json 文件。随后从 package.json 中删除 "turbo" 键。

npx @turbo/codemod create-turbo-config

示例

// After, package.json
{
  "name": "@acme/workspace",
  "private": true,
- "turbo": {
-   "pipeline": {
-     ...
-   }
- },
}