如何通过MSBuild在AppHarbor上运行grunt?

时间:2014-01-30 22:18:15

标签: msbuild gruntjs appharbor

我可以使用MSBuild构建我的解决方案。它运行grunt并在解决方案目录中生成一个“dist”文件夹,然后MSBuild将这些文件复制到$(OutDir)

假设我的解决方案名为 MySolution.sln。我旁边有另一个名为after.MySolution.sln.targets的文件,其中包含

<!--?xml version="1.0" encoding="utf-8"?-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="Grunt" AfterTargets="Build">
        <Exec Command="grunt build --no-color" WorkingDirectory="$(MSBuildProjectDirectory)" />

        <ItemGroup>
            <DistFiles Include="$(MSBuildProjectDirectory)\dist\**\*.*" />
        </ItemGroup>
        <Copy SourceFiles="@(DistFiles)" DestinationFolder="$(OutDir)\www\%(RecursiveDir)" />
    </Target>
</Project>

当AppHarbor构建解决方案时,我收到此错误

Grunt:
    grunt build --no-color
    'grunt' is not recognized as an internal or external command,
    operable program or batch file.

如果AppHarbor尚未提供grunt-cli,这是可以理解的。那我怎么能在AppHarbor上运行我的grunt构建?

注意:从技术上讲,要成功运行grunt,我需要运行npm installbower install,所以如果答案还包括grunt包和bower包,那就值得称赞!

1 个答案:

答案 0 :(得分:2)

为了运行我的构建,我不得不直接使用node而不是grunt-cli。我的MSBuild现在只需调用run-grunt.bat,其中包含:

@echo off
echo Installing npm dependencies
call npm config set registry http://registry.npmjs.org/
call npm install
echo Running bower.commands.install()
call node -e "var b = require('bower'); b.commands.install()"
echo Running grunt.cli()
call node -e "var g = require('grunt'); g.cli.tasks = ['build']; g.cli.options.color = false; g.cli();"

似乎有效;下一个问题是构建服务器上的节点仍然是版本0.6.10,但这是另一个问题:)

请注意,我添加了注册表,因为它不起作用(我必须检查AppHarbor),因为我使用bower,可能其他人也会这样,我在我的例子中包含了如何运行{{1 }}

重要提示:您需要在bower install文件中加入grunt(以及使用它时的凉亭)!