是否可以以及如何在npm命令中运行批处理脚本?
我在package.json
文件中有一个角度项目,在scripts
部分下,我想定义一个npm命令来运行批处理脚本。我知道我可以运行带有关键字bash
的shell脚本,例如
"start": "cd mydir && bash ./myscript"
然后我可以在项目目录中运行npm start
,这将更改目录并执行myscript.sh
脚本。 在npm中运行批处理脚本的等效关键字是什么?
新手在这里。对不起,如果这是一个重复的问题;也许我没有搜索正确的条款,但我无法找到这个问题的答案。
答案 0 :(得分:14)
为了帮助提供此答案的上下文,我们假设有两个名为say-hello.bat
和say-hello-cmd
的批处理文件。两个批处理文件都具有相同的简单设计内容,如下所示:
echo Hello World
当通过npm-scripts
调用两个批处理文件中的任何一个时,我们希望控制台记录:
Hello World
项目目录结构:
现在,让我们假设我们的项目目录结构如下:
.
├── a
│ └── b
│ ├── say-hello.bat
│ └── say-hello.cmd
├── package.json
├── say-hello.bat
├── say-hello.cmd
└── ...
如您所见,我们有:
say-hello.bat
和say-hello.cmd
存储在项目目录的根目录中。它们与package.json
处于同一级别。say-hello.bat
和say-hello.cmd
存储在项目目录的子目录中。这些路径的路径为:a/b/
<强> NPM-脚本强>
为了能够通过npm
调用这些批处理文件,scripts
的{{1}}部分应定义如下:
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"
},
...
}
到项目目录并运行以下任何命令:
cd
npm run bat
npm run cmd
npm run bat-in-sub-dir
将运行批处理文件,您将成功看到登录到控制台的单词npm run cmd-in-sub-dir
。
备注强>
以上这些例子之间的显着差异是:
当批处理文件存储在项目目录的根目录中时,您只需在脚本中提供批处理文件的名称。 E.g。
Hello World
当批处理文件存储在项目目录的子目录中时(例如"bat": "say-hello.bat"
),您必须首先a/b/
到该文件夹,然后提供批处理文件的名称跑步。 E.g。
cd