在node / Grunt中执行操作系统特定的脚本

我有一个Grunt任务在本地机器上执行.cmd文件来做它的事情。 我需要在CI服务器上使用这个任务,这是一台Linux机器。 我有相关的.sh(用于Linux的shell脚本)。 我需要一种方法来执行这两个不更改我的Gruntfile。

目前,我必须更改我的Gruntfile,使其在本地为Windows和远程文件使用.sh。

任何解决scheme做同样是受欢迎的。 检测底层操作系统? 或者调用相同的命令,内部调用特定于操作系统的命令?

您可以利用节点的process.platform :

process.platform
你运行的是什么平台:“达尔文”,“freebsd”,“linux”,“sunos”或“win32”

console.log('This platform is'+ process.platform);

然后在代码中,可以select添加文件扩展名的基础上:

if (process.platform === "win32") { ext = ".cmd"; } else { ext = ".sh"; } 

使用grunt-shell或其他shell命令工具,利用win和* nix shell之间的相似性,特别是|| 。 第一个cmd将在* nix上失败,并回退到sh

  shell: { options: { stderr: false, failOnError: true }, command: 'cmd command.cmd || sh command.sh' }