コンパイルをするためにtscコマンドを使いたいのですが
zsh: command not found: tsc
と表示されます。
「1つのプロジェクトの依存モジュール」として存在するtypescriptと
マシンにインストールしてコマンドラインツールとして使いたいtypescriptは役割が違います。
ですのでグローバルを意味する-g
オプションを使って導入してください。
bash
1$ npm install -g typescript
まぁ質問文の内容から理解度的に
「それは知ってるけど、それじゃヤダ、何とかならないか?」という話だと思いますね。
解決策は色々ありますね。
最初から入っており、サブコマンドがpackage.jsonにあれは優先して実行
package.jsonに存在しなければ都度npmのサイトから探してダウンロード→削除という挙動
まぁnpmにnpxやpackage-lock.jsonが無かったカスな時代に便利という目玉機能でしたからね
- npm-scriptsに登録して
npm run xxx
コマンドから呼び出す
npm-scripts実行中はnode_modules/.bin
にパスを自動的に通してくれるのでコマンド認識してくれるというカラクリです
基本的には何かのサブコマンドとして実行してくれみたいな形式になるので、
「サブコマンドだなんてやだやだ!」になるならnpm install -g typescript
になります。
If you do not specify a script to the yarn run command, the run command will list all of the scripts available to run for a package.
和訳: yarn run
コマンドにスクリプトを指定しない場合、実行コマンドは、パッケージに対して実行できるすべてのスクリプトをリストします。
とりまyarn run
を実行して、
使えるサブスクリプトの一覧を聞いてみては?
tscコマンドがあるならば、yarn run tsc ファイル名
とか出来るんじゃないですか?
yarn使ってないから知らんけど
なぜなのか、そもそもtypescriptをインストールしただけではtscコマンドは使えないのか。
が気になります。
Node.jsに於けるプロジェクトの在り方の話になってきます。
ここはnpmもyarnも変わらないですからね。
マシンに入っている特定のプロジェクトを指して、
今日からここがプロジェクトルートだ!ということで
git init
やnpm init -y
等をするわけですが(Gitの場合はgit clone URI
が多いかな?)
Node.jsの1つのプロジェクトの始まりは、
npm init -y
で作られたpackage.jsonで決まります。
その中で「このプロジェクトには○○モジュールはあったほうがいいよね、導入しちゃおう」で
npm install パッケージ名
でモジュールを連れてくるわけですが、
これはマシン全体に適用するものじゃないですよね?
グローバルにインストールしなくてはいけないなんてことがあるのでしょうか?
今回の例だとAプロジェクトと、Bプロジェクトのtypescriptのバージョン番号が違ったらどうすんの?
って話になるわけです。
なのでグローバルにインストールしなければ
マシン全体としてtsc
コマンドを登録して何時でも使えるようにするわけにはいきません。