从Visual Studio的后期构建事件命令行中运行Grunt

15

我已经尝试在Visual Studio 2010和Visual Studio 2012中完成此操作。如果我的Gruntfile.js文件位于项目的根目录中,我可以从后期构建事件命令行运行"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
针对在谷歌搜索而来的读者,简短提示:我刚遇到了这个问题,我的路径设置是正确的,但是我是在 Visual Studio 打开后设置的,这意味着路径更新在 Visual Studio 中不可用。关闭所有 Visual Studio 窗口,然后重新打开解决方案实际上修复了我的问题(就像您可能在控制台窗口中执行的操作一样 - 也可以重新源化它,但这对于 Visual Studio 来说没有意义)。 - longda
1
这真的帮了我,谢谢 @longda。关闭并重新打开。。“你试过关掉再打开吗?” - peter
4个回答

13

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

幸运的是,VS中的后置构建命令就像一个命令窗口,因此您可以将以下内容放入您的后置构建命令中:

CD $(ProjectDir)Public\
grunt

假设已定义默认的Grunt任务,那么这应该可以工作。


当我尝试上述操作时,我得到了以下信息:“命令“CD C:\MyDocs\Code\GruntTest\GruntTest
grunt”退出,代码为6。我错过了什么?这个解决方案对其他人有效吗?谢谢!
- Victor
1
我确实将命令分别放在不同的行上(stackoverflow 不允许多行注释)。此外,如果我进入命令提示符并 CD 到项目目录,它确实可以工作。但它看起来仍然像是尝试将其作为一个命令执行。 - Victor
确实非常奇怪。我使用的是VS2012专业版。我将尝试从头开始创建一个新项目,看看是否能解决问题。你安装了grunt-cli吗?我也尝试过指向这个,但没有用。 - Victor
现在我只是想让 QUnit 在 VS 中运行并输出测试结果。我应该尝试另一个任务来确认这是否有效吗? - Victor
如果您可以在命令提示符中进入目录并键入“grunt”(或“grunt test”,无论您将其设置为什么),并且它成功运行而没有任何警告,则我认为它应该可以工作。您可以尝试一个更简单的任务,只有一个任务正在运行(例如,设置grunt-contrib-clean任务或其他内容),而不是多步骤过程。 - Mike Pugh
显示剩余7条评论

3

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


3
如果您在打开Visual Studio的情况下:
  1. 安装了node包管理器(npm)和grunt
  2. 然后尝试运行包括grunt命令的预/后构建命令。
则构建将会因为"exited with code 9009"错误消息而失败。(意思是 "我不知道grunt命令是什么")
要解决这个问题,只需关闭Visual Studio并重新打开它(正如@longda在他的评论中提到的那样),一切都将正常工作。
我正在使用VS 2013高级版和最新版本的npm/grunt。

0
有点相关,我遇到了一个奇怪的问题,xcopy在grunt之后无法运行,将它们作为单个命令运行可以解决这个问题:
cd $(SolutionDir)..\App
grunt release && xcopy "$(SolutionDir)..\App\release" "$(TargetDir)Content\" /Y /E /S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接