Turborepo Codemods
Turborepo は、機能が非推奨になった場合に Turborepo コードベースのアップグレードを支援するための Codemod 変換と自動移行スクリプトを提供します。
Codemod は、コードベース上でプログラムで実行される変換です。これにより、すべてのファイルを個別に確認することなく、大量の変更を適用できます。
使用法
npx @turbo/codemod <transform> <path>
transform
- 変換の名前。利用可能な変換は以下を参照してください。path
- 変換するファイルまたはディレクトリ--dry
- ドライランを実行します。コードは編集されません。--print
- 変更された出力を比較のために出力します。
Turborepo 1.x
- add-package-manager
- create-turbo-config
- migrate-env-var-dependencies
- set-default-outputs
- stabilize-env-mode
- transform-env-literals-to-wildcards
add-package-manager
v1.1.0 で導入
ルートのpackage.json
を変換し、検出されたパッケージマネージャー(yarn
、npm
、pnpm
)とそのバージョン(例:yarn@1.22.17
)をpackageManager
キーとして設定します。このキーは現在、Node.jsでサポートされており (新しいタブで開きます)、Turborepoでより高速なパッケージマネージャー検出に使用されます(ファイルシステムのみから推測するのではなく)。
例えば、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/*"
]
}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod add-package-manager
create-turbo-config
v1.1.0 で導入
package.json
内の"turbo"
キーに基づいて、プロジェクトのルートにturbo.json
ファイルを作成します。"turbo"
キーはその後、package.json
から削除されます。
例:
// 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.dokyumento.jp/schema.json",
+ "pipeline": {
+ ...
+ }
+}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod create-turbo-config
migrate-env-var-dependencies
v1.5.0で導入されました
turbo.json
内のすべての環境変数依存関係を、dependsOn
およびglobalDependencies
からそれぞれenv
およびglobalEnv
に移行します。
例:
// Before, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalDependencies": [".env", "$CI_ENV"],
"pipeline": {
"build": {
"dependsOn": ["^build", "$API_BASE"],
"outputs": [".next/**", "!.next/cache/**"]
},
"lint": {},
"dev": {
"cache": false,
"persistent": true
}
}
}
// After, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/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
}
}
}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod migrate-env-var-dependencies
set-default-outputs
v1.7.0で導入されました
turbo.json
の出力に、以前推測されていたdist/
とbuild/
を含めるように移行します。
例:
// Before, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalDependencies": [".env"],
"globalEnv": ["CI_ENV"],
"pipeline": {
"build": {
"dependsOn": ["^build"],
"env": ["API_BASE"],
"outputs": [".next/**", "!.next/cache/**"]
},
"lint": {
"outputs": []
},
"dev": {
"cache": false,
"persistent": true
}
}
}
// After, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/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/**"]
}
}
}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod set-default-outputs
stabilize-env-mode
v1.10.0で導入されました
turbo.json
のexperimentalGlobalPassThroughEnv
をglobalPassThroughEnv
に、experimentalPassThroughEnv
をpassThroughEnv
に移行します。
例:
// Before, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"experimentalGlobalPassThroughEnv": ["CC"],
"pipeline": {
"build": {
"experimentalPassThroughEnv": ["GOROOT"],
}
}
}
// After, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalPassThroughEnv": ["CC"],
"pipeline": {
"build": {
"passThroughEnv": ["GOROOT"],
}
}
}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod stabilize-env-mode
transform-env-literals-to-wildcards
v1.10.0で導入されました
既存の環境変数フィールドで、内容が新しいワイルドカード構文と曖昧になる可能性のあるものを更新します。
例:
// Before, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalEnv": ["THIS_*_IS_LITERAL"],
"globalPassThroughEnv": ["!LITERAL_LEADING_EXCLAMATION"],
"pipeline": {
"build": {
"env": ["50_PERCENT_OFF*_HAS_SMALL_PRINT"],
"passThroughEnv": ["**BOLDED**"],
}
}
}
// After, turbo.json
{
"$schema": "https://turbo.dokyumento.jp/schema.json",
"globalEnv": ["THIS_\\*_IS_LITERAL"],
"globalPassThroughEnv": ["\\!LITERAL_LEADING_EXCLAMATION"],
"pipeline": {
"build": {
"env": ["50_PERCENT_OFF\\*_HAS_SMALL_PRINT"],
"passThroughEnv": ["\\*\\*BOLDED\\*\\*"],
}
}
}
使い方
プロジェクトに移動します
cd path-to-your-turborepo/
コードモッドを実行します
npx @turbo/codemod transform-env-literals-to-wildcards