在npm脚本中运行批处理文件

Ann*_*ing 12 batch-file npm-scripts

是否可以以及如何在npm命令中运行批处理脚本?

我有一个角度项目,在package.json文件中,在scripts节下,我想定义一个npm命令来运行批处理脚本.我知道我可以用关键字运行shell脚本,bash例如

"start": "cd mydir && bash ./myscript"
Run Code Online (Sandbox Code Playgroud)

然后我可以npm start在我的项目目录中运行,该目录将更改目录并执行myscript.sh脚本.在npm中运行批处理脚本的等效关键字是什么?

新手在这里.对不起,如果这是一个重复的问题; 也许我没有搜索正确的术语,但我无法找到这个问题的答案.

Rob*_*obC 20

为了帮助提供这个答案的上下文,让我们说两个名为say-hello.bat和的批处理文件say-hello-cmd.两个批处理文件都具有相同的简单设计内容,如下所示:

echo Hello World
Run Code Online (Sandbox Code Playgroud)

通过调用两个批处理文件中的任何一个时npm-scripts,我们希望控制台记录:

Hello World

项目目录结构:

现在,让我们假设我们的项目目录结构如下:

.
??? a
?   ??? b
?       ??? say-hello.bat
?       ??? say-hello.cmd
??? package.json
??? say-hello.bat
??? say-hello.cmd
??? ...
Run Code Online (Sandbox Code Playgroud)

如您所见,我们有:

  • say-hello.batsay-hello.cmd存储在项目目录的根目录中.他们和他们处于同一水平package.json.
  • 我们还拥有say-hello.batsay-hello.cmd存储在项目目录的子目录中.这些目录的路径是:a/b/

NPM-脚本

为了能够通过调用这些批处理文件npm,该scripts部分package.json应该像下面这样定义的:

{
  ...
  "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"
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果您现在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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 当批处理文件存储在项目目录的子目录中时(例如a/b/),您必须首先cd访问该文件夹,然后提供要运行的批处理文件的名称.例如

    "bat-in-sub-dir": "cd a/b/ && say-hello.bat"
    
    Run Code Online (Sandbox Code Playgroud)