web-dev-qa-db-ja.com

npmスクリプトでバッチファイルを実行する

Npmコマンドでバッチスクリプトを実行することは可能ですか?

angularプロジェクトがあり、package.jsonファイルのscriptsセクションの下に、バッチスクリプトを実行するnpmコマンドを定義します。キーワードbashを使用してシェルスクリプトを実行できることを知っています。

"start": "cd mydir && bash ./myscript"

次に、プロジェクトディレクトリでnpm startを実行します。これにより、ディレクトリが変更され、myscript.shスクリプトが実行されます。 npmでバッチスクリプトを実行するための同等のキーワードは何ですか?

ここの初心者。これが重複した質問である場合は申し訳ありません。正しい用語を検索していないかもしれませんが、この質問の答えを見つけることができません。

11
Anna Morning

この答えにコンテキストを提供するために、say-hello.batsay-hello-cmdという名前の2つのバッチファイルがあるとします。両方のバッチファイルには、次のような単純で不自然なコンテンツが含まれています。

echo Hello World

npm-scriptsを介して2つのバッチファイルのいずれかを呼び出すと、コンソールがログを記録することが期待されます。

Hello World

プロジェクトのディレクトリ構造:

ここで、プロジェクトディレクトリが次のように構成されていると仮定します。

.
├── a
│   └── b
│       ├── say-hello.bat
│       └── say-hello.cmd
├── package.json
├── say-hello.bat
├── say-hello.cmd
└── ...

ご覧のとおり、次のものがあります。

  • プロジェクトディレクトリのルートに格納されているsay-hello.batおよびsay-hello.cmdpackage.jsonと同じレベルです。
  • また、プロジェクトディレクトリのサブディレクトリにsay-hello.batおよびsay-hello.cmdが保存されています。これらのパスは次のとおりです。a/b/

npm-scripts

npmを介してこれらのバッチファイルを呼び出すには、package.jsonscriptsセクションを次のように定義する必要があります。

{
  ...
  "scripts": {
    "bat": "say-hello.bat",
    "cmd": "say-hello.cmd",
    "bat-in-sub-dir": "cd a/b/ && say-hello.bat",
    "cmd-in-sub-dir": "cd a/b/ && say-hello.cmd"
  },
  ...
}

プロジェクトディレクトリにcdし、次のコマンドのいずれかを実行する場合:

  • npm run bat
  • npm run cmd
  • npm run bat-in-sub-dir
  • npm run cmd-in-sub-dir

バッチファイルが実行され、Hello Worldという言葉がコンソールに正常に記録されます。

上記のこれらの例の顕著な違いは次のとおりです。

  • バッチファイルがプロジェクトディレクトリのルートに保存されている場合は、スクリプトでバッチファイルの名前を指定するだけです。例えば。

    "bat": "say-hello.bat"
    
  • バッチファイルがプロジェクトディレクトリのサブディレクトリ(例:a/b/)に保存されている場合、まずそのフォルダーにcdし、実行するバッチファイルの名前を指定する必要があります。例えば。

    "bat-in-sub-dir": "cd a/b/ && say-hello.bat"
    
17
RobC