tsc コマンドが見つからない(command not found: tsc)
`tsc` が `command not found` になる原因は、TypeScript をグローバルではなくプロジェクトにのみ入れているケースが大半。
`npx tsc` か `npm run` 経由で叩くのが正解。
#tsc#command-not-found#path#npx#scripts
公開:
要約
tsc: command not found のほとんどは「ローカル install しただけでグローバルに無い」が原因。npx tsc で node_modules/.bin/tsc を直接叩くか、npm scripts で間接的に呼ぶのが定石。
よくある原因
- ローカルのみ install:
npm install -D typescriptだけだとシェルからtscは引けない。./node_modules/.bin/tscには存在する。 - PATH キャッシュ: グローバルに入れた直後、シェルが旧 PATH を覚えており再起動が必要。
- install 失敗:
npm installがエラー終了してnode_modules/.bin/tscが無い。 - Windows 固有:
PATHEXTに.cmd不在、または WSL シェルから Windows 側 Node を呼んでパス変換が崩れる。 - monorepo: TypeScript が workspace ルートだけに入っており、サブパッケージから直接呼べない。
解決策
1. npx で叩く(推奨)
npx tsc --version
npx tsc -p tsconfig.jsonnpx は ./node_modules/.bin を最優先で探すため、ローカル install で十分(npm Docs - npx)。
2. npm scripts に書く
{
"scripts": {
"build": "tsc -p .",
"typecheck": "tsc --noEmit"
}
}npm run build ではシェルの PATH に ./node_modules/.bin が自動で先頭追加される。
3. どうしてもグローバルに必要なら
npm install -g typescript
which tsc
tsc --versionただし複数プロジェクトでバージョン差があると挙動が変わるので、CI とローカルで一致させる運用がベター。
4. install 失敗を確認
ls node_modules/.bin/tsc
# 存在しなければ
rm -rf node_modules package-lock.json
npm install5. monorepo は workspace 経由で呼ぶ
# pnpm
pnpm --filter @myorg/app exec tsc --noEmit
# npm workspaces
npm exec --workspace=packages/app -- tsc --noEmit