@turbo/codemod
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.json 的 experimentalGlobalPassThroughEnv 迁移到 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 中的所有环境变量依赖项分别从 dependsOn 和 globalDependencies 迁移到 env 和 globalEnv。
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 键作为检测到的包管理器(yarn、npm、pnpm)和版本(例如 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": {
- ...
- }
- },
}
+ {
+ "$schema": "https://turborepo.com/schema.json",
+ "pipeline": {
+ ...
+ }
+ }