はじめに
VS Code のターミナルから、npmやyarnでローカルインストールしたパッケージを実行すると、「そんなコマンド無いです。」的なメッセージが出がちです。
例えば、ローカルインストールした eslint を実行すると、
'eslint' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とか
bash: eslint: command not found
の様に実行できません。ローカルインストールした先を環境変数 PATH に設定してないからですが、かといって毎回 ./node_modules/.bin/eslint
などと打つのは流石につらい。。
環境変数 PATH を設定する
VS Code のワークスペースに環境変数が設定できるので、以下の様に PATH を設定しておくと便利です。
{
"folders": [
{
"path": "."
}
],
"settings": {
"terminal.integrated.env.windows": {
"PATH": "${workspaceRoot}\\node_modules\\.bin;${env:PATH}"
},
"terminal.integrated.env.osx": {
"PATH": "${workspaceRoot}/node_modules/.bin:${env:PATH}"
}
}
}
Windows なら terminal.integrated.env.windows
、
Mac なら terminal.integrated.env.osx
、
に記載します。
Linux なら terminal.integrated.env.linux
らしいです。値は多分 Mac と同じだと思います。(環境が無いので未確認。)
package.jsonファイルと同じ場所に .code-workspaceファイルを置くのが好み(folders.path
が .
からも見て取れますね。)なんですが、ユーザー設定に書く方が一般的なんでしょうか?
確かにワークスペース毎に設定ってもの非効率ですかね?
ユーザー設定なら以下な感じでしょうか。
{
"terminal.integrated.env.windows": {
"PATH": "${workspaceRoot}\\node_modules\\.bin;${env:PATH}"
},
"terminal.integrated.env.osx": {
"PATH": "${workspaceRoot}/node_modules/.bin:${env:PATH}"
}
}
.code-workspace ファイルとは
Visual Studio や eclipse で言う「プロジェクトファイル」の様なイメージでしょうか。
VS Code のメニューから「ファイル」-「名前を付けてワークスペースを保存」で、作業中のワークスペースを保存できます。「hogehoge.code-workspace」の様に名前を付けられます。
VS Code は前回のワークスペースをデフォルトで開きますが、複数のワークスペースの作業をしている場合は、対象の .code-workspace ファイルをダブルクリックで開けて便利だと思います。
頻繁に使うコマンドは package.json の script に書く
これなら、自動で ./node_modules/.bin
にPATHが通った状態だし、VS Code のメニューから「ターミナル」-「タスクの実行」で実行できるので便利です。
{
...(略)...
"scripts": {
"lint": "eslint src/ --ext .ts"
},
...(略)...
}
みたいな。(例です。コマンドでlintってしないよね。。)
まとめ
複数の開発環境が同居してるのに PATH の設定が辛いからグローバルインストール、あーバージョンがー、といった事態は無くせるんじゃないでしょうか。