ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

Node.js, nodemonコマンドはscriptにnpxが必要な不思議。

Node.js image
イラストダウンロードサイト【イラストAC】
の画像をもとに加工しています。

package.jsonに定義するscriptでは、ローカルパッケージのコマンドでもnpxは必要ありません。

'webpack ...' や 'yarn ...' と書いても問題ない。

でもnodemonだけは別です。'npx nodemon' としないとコマンドが見つからないと言われてしまう。

まずは、package.jsonの中身を見てください。

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "external-css": "python css-minify-v2-honban.py",
    "cleanup": "python cleanup.py",
    "build": "webpack --mode=production --profile --progress=profile & yarn external-css & yarn cleanup",
    "dev": "webpack --mode=development & yarn external-css & yarn cleanup",
    "watch": "npx nodemon --ext scss,js,html --watch src --exec yarn build"
  },
}

npmパッケージのコマンド webpack, yarn は npxがついてないのに、nodemonにはついてます。

(pythonはプログラム言語Pythonの実行コマンド。スクリプトは多言語のコマンドも実行できる。)

この環境では、npmパッケージのグローバルインストールはしていません。

なので、スクリプトの実行はこうなる。

npx yarn build

スクリプト定義では通常、ローカルパッケージのコマンドでもコマンド名のフルパスやnpxは必要ありません。

(上記ではwebpack, yarn。)

npmパッケージのグローバルインストールでは、npmのインストール先(/usr/local/lib)にnode_modulesディレクトリが作られ、そこにパッケージファイルがインストールされる。

(Windowsでは ユーザ\AppData\Roaming\npm\)

ローカルは、ソースプロジェクトのホームディレクトリ(package.jsonのあるところ)にnode_modulesディレクトリが作られる。

グローバルにインストールされたパッケージのコマンドは、あたかもOSの環境変数に追加されたようにコマンドが使える。

(コマンドのフルパス指定はいらず、いきなりコマンド名から使える。)

でも、nodemonはちがうよう。パッケージの説明でもそんな文言があります。

With a local installation, nodemon will not be available in your system path or you can't use it directly from the command line. Instead, the local installation of nodemon can be run by calling it from within an npm script (such as npm start) or using npx nodemon.

(ローカルインストールのnodemonは、システムパスでの利用、コマンドラインからの直接使用はできません。代わりに、npmスクリプト(npm startなど)内から呼び出すか、npx nodemonを使用して、nodemonのローカルインストールを実行できます。)

npmパッケージ公式サイト - nodemon Instllation(筆者和訳)

そういう仕様なんだからしょうがないですね?

コマンドが見つからないならnpxを追加すればいいだけの話で、そんなに気にすることではないです。

でも、スクリプトにもnpxがいるんだと思ってしまって、webpack, yarnなどほかのコマンドに付けないように気をつけましょう。

nodemonは特殊だから。

最後に大事なことを忘れてた。nodemonは指定した拡張子のファイルを監視して、ファイルの追加・編集・削除したら指定したコマンドを実行する、開発支援ツールの自動化のためのものです。

これなしでは開発したくないと思うほどの優秀なパッケージ。

(上記定義では、webpackの起動を自動化している。)

npmパッケージ公式サイト

nodemon

前の投稿
Node.js, パッケージのコマンドが実行できない。インストールしたのに。
webpack4, プラグインのバージョンアップでエラー三昧
次の投稿
コメントを残す

*