从Visual Studio post build事件命令行运行Grunt

时间:2013-06-23 01:32:22

标签: visual-studio-2010 visual-studio-2012 gruntjs post-build-event

我试图在Visual Studio 2010和Visual Studio 2012中执行此操作。如果我的Gruntfile.js文件位于项目的根目录中,我可以从post build事件命令行运行“grunt”命令运行没有问题。

grunt or grunt.cmd

但如果它在子目录中

$(ProjectDir)Public\grunt or $(ProjectDir)Public\grunt.cmd

它给了我这个错误

The command "c:\web\Public\grunt.cmd" exited with code 9009.

我一直在研究这个,但我找不到任何帮助。我确实在grunt文档中发现我需要使用“grunt.cmd”而不是仅仅调用“grunt”,但这对我没什么帮助。

4 个答案:

答案 0 :(得分:13)

正在发生的事情是你为grunt指定一个确切的路径,它实际上不在$(ProjectDir)Public \中。当您在命令提示符下的该目录中键入grunt时,它会执行,因为您已将路径环境变量设置为包含grunt所在的目录。

幸运的是,VS中的post构建命令就像一个命令窗口,所以你可以把它放在你的构建命令中:

CD $(ProjectDir)Public\
grunt

这应该有效(假设定义了默认的grunt任务)。

答案 1 :(得分:3)

如果您打开Visual Studio,那么:

  1. 已安装的节点包管理器(npm)和grunt
  2. 然后尝试运行pre / post构建命令,包括grunt命令。
  3. 构建将失败,而#34;退出代码9009"信息。 (意思是"我不知道grunt命令是什么")

    要解决这种情况,只需关闭visual studio并重新打开它(正如@longda在评论中提到的那样),一切都会正常工作。

    我使用的是VS 2013 Premium和最新版本的npm / grunt。

答案 2 :(得分:3)

您可以使用任务运行器作为后期构建运行,如下所示。 右键单击构建 - >绑定 - >然后指定是否需要它来运行post或pre build

答案 3 :(得分:0)

有点相关,我有一个奇怪的问题,xcopy在grunt之后不能运行,运行它们作为单个命令修复它:

cd $(SolutionDir)..\App
grunt release && xcopy "$(SolutionDir)..\App\release" "$(TargetDir)Content\" /Y /E /S