Grunt – 如何从外部项目运行常见的外部任务

我刚开始使用Grunt,我想有一个可以定义常见任务的公共项目。 之后,每个团队都可以创build自己的项目,并能够将我的通用项目添加为依赖项,并运行常见任务。

当您想要将一些预定义的任务添加到您的FE构buildpipe道时也很有帮助。 当有人把这个项目推到github上并试图使用它,比方说,jenkins,那么我也想默认运行一些其他的任务(如jslint,uglify,compress,nexus deploy等)。

我尝试通过创build一个包含所有常见任务的grunt项目,然后将其作为依赖添加到其他项目中。 问题是我不能从外部项目运行常见的任务。 有没有另一种方法来实现这一目标?

不是试图将所有任务放到一个存储库中并将其拉入的巨大风扇,但这是可能的。

我没有做过之前(我已经完成目录loadTasks,它只是工作),我不喜欢它。 但这里有两个可能性我看到:

1.使用子模块

你可以使用git submodules把你的任务回购到你的项目回购的文件夹中,并从他们的任务中加载你的任务。

从文件夹加载任务就是这样完成的(加载文件夹中的所有文件!):

grunt.loadTasks "./your-git-submodule-folder" 

2.使用1个Git-Repo并通过NPM进行安装

根据需要使用尽可能多的任务创build存储库。 一个任务应该驻留在一个文件(它只与一个文件,但我不会推荐它)

 // task1.js grunt.registerMultiTask(task1", "run task1", function() { // do stuff here }); // task2.js grunt.registerMultiTask(task2", "run task2", function() { }); 

那么你可以在你的项目中安装git-repo作为一个简单的开发者依赖项:

 $ npm install git+ssh://your-tasks-repo.git --save-dev 

为此,Gruntfile需要为两个任务configuration目标


我会做什么

我自己会为每一个任务创build一个单一的git-repo,并将每一个任务分别安装到我需要它们的项目中(从git-repo安装npm)。

发布对于npm-registry可能对社区有用的任务。 使用grunt-init gruntplugin来创build新的任务。


关于你的构build过程:

只需要添加一个别名任务到你的grunt文件中,你想要在新的提交上运行所有的任务:

 grunt.registerTask('jenkins', ['jslint', 'compress', ...]); 

并configuration你的jenkins来运行这个任务(你需要在你的Projects-Config中添加一个git-hook和Source-Code-Management ),并且将一个shell脚本configuration为Build-Step:

 npm install && grunt jenkins 

或者甚至更好,在你的package.json中添加一个脚本部分并使用一个testing命令。

我在这个主题上创造了一个更好的答案,不幸被删除(我不知道为什么,它有很多upvotes …):

https://stackoverflow.com/questions/14722649/continuous-integration-in-nodejs/15657588#15657588

这里是另一个关于定制任务开发的答案:

Grunt:自定义任务开发的方法