コマンドラインから Node.js スクリプトを実行する

Node.js プログラムを実行する通常の方法は、(Node.js をインストールした後に)グローバルに利用可能な node コマンドを実行し、実行したいファイルの名前を渡すことです。

メインの Node.js アプリケーションファイルが app.js の場合、次のように入力して呼び出すことができます。

node app.js

上記では、シェルに node でスクリプトを実行するように明示的に指示しています。この情報を 「shebang」 (シェバン) 行を使って JavaScript ファイルに埋め込むこともできます。「shebang」はファイルの最初の行で、スクリプトを実行するためにどのインタプリタを使用するかを OS に伝えます。以下は JavaScript の最初の行です。

#!/usr/bin/node

上記では、インタプリタの絶対パスを明示的に指定しています。すべてのオペレーティングシステムが node を bin フォルダに持っているわけではありませんが、すべてのシステムに env があるはずです。OS に env を node をパラメータとして実行するように指示できます。

#!/usr/bin/env node

// your javascript code

shebang を使用するには、ファイルに実行権限が必要です。次を実行することで app.js に実行権限を与えることができます。

chmod u+x app.js

コマンドを実行する際は、app.js ファイルが含まれているのと同じディレクトリにいることを確認してください。

ファイルパスの代わりに文字列を node の引数として渡す

文字列を引数として実行するには、-e, --eval "script" を使用できます。続く引数を JavaScript として評価します。REPL で事前定義されているモジュールは、スクリプトでも使用できます。

Windows では、cmd.exe は引用符として二重引用符 " しか認識しないため、一重引用符は正しく機能しません。Powershell または Git bash では、'" の両方が使用できます。

node -e "console.log(123)"

アプリケーションを自動的に再起動する

Node.js V16 以降、ファイルが変更されたときにアプリケーションを自動的に再起動する組み込みオプションがあります。これは開発目的で役立ちます。この機能を使用するには、Node.js に --watch フラグを渡す必要があります。

node --watch app.js

これでファイルを変更すると、アプリケーションは自動的に再起動します。--watch フラグのドキュメントをお読みください。

Node.js でタスクを実行する

Node.js は、package.json ファイルで定義された特定のコマンドを実行できる組み込みのタスクランナーを提供します。これは、テストの実行、プロジェクトのビルド、コードの lint チェックなど、反復的なタスクを自動化するのに特に役立ちます。

--run フラグを使用する

--run フラグを使用すると、package.json ファイルの scripts セクションから指定されたコマンドを実行できます。たとえば、次の package.json がある場合:

{
  "type": "module",
  "scripts": {
    "start": "node app.js",
    "dev": "node --run start -- --watch",
    "test": "node --test"
  }
}

--run フラグを使用して test スクリプトを実行できます。

node --run test

コマンドに引数を渡す

package.json ファイルの scripts オブジェクトにある dev キーについて説明しましょう。

-- --another-argument という構文は、コマンドに引数を渡すために使用されます。この場合、--watch 引数が dev スクリプトに渡されます。

node --run dev

環境変数

--run フラグは、スクリプトで役立つ特定の環境変数を設定します。

  • NODE_RUN_SCRIPT_NAME: 実行されているスクリプトの名前。
  • NODE_RUN_PACKAGE_JSON_PATH: 処理されている package.json ファイルへのパス。

意図的な制限

Node.js のタスクランナーは、npm runyarn run のような他のタスクランナーと比較して意図的に機能が制限されています。パフォーマンスとシンプルさに重点を置いており、prepost スクリプトの実行のような機能は省略されています。これにより、単純なタスクには適していますが、すべてのユースケースをカバーできるわけではありません。