我可以使用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 install
和bower install
,所以如果答案还包括grunt包和bower包,那就值得称赞!
答案 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(以及使用它时的凉亭)!