できない.dev

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 tscnode_modules/.bin/tsc を直接叩くか、npm scripts で間接的に呼ぶのが定石。

よくある原因

  1. ローカルのみ install: npm install -D typescript だけだとシェルから tsc は引けない。./node_modules/.bin/tsc には存在する。
  2. PATH キャッシュ: グローバルに入れた直後、シェルが旧 PATH を覚えており再起動が必要。
  3. install 失敗: npm install がエラー終了して node_modules/.bin/tsc が無い。
  4. Windows 固有: PATHEXT.cmd 不在、または WSL シェルから Windows 側 Node を呼んでパス変換が崩れる。
  5. monorepo: TypeScript が workspace ルートだけに入っており、サブパッケージから直接呼べない。

解決策

1. npx で叩く(推奨)

npx tsc --version
npx tsc -p tsconfig.json

npx./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 install

5. monorepo は workspace 経由で呼ぶ

# pnpm
pnpm --filter @myorg/app exec tsc --noEmit
 
# npm workspaces
npm exec --workspace=packages/app -- tsc --noEmit

この記事は役立ちましたか?