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

时间:2014-08-06 12:11:17

标签: javascript node.js build gruntjs build-process

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

当您想要向FE构建管道添加一些预定义任务时,也很有用。当有人将该项目推送到github并尝试使用它构建它时,让我们说,詹金斯,然后我想默认运行其他任务(如jslint,uglify,compress,nexus deploy等)。

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

1 个答案:

答案 0 :(得分:1)

并不是尝试将所有任务放入一个存储库并将其拉入的巨大粉丝,但这是可能的。

我之前没有这样做过(我从目录中完成了loadTasks,它只是工作),我不喜欢它。但这里有两种可能性:

<强> 1。使用子模块

您可以使用git submodules将您的tasks-repo拉入项目仓库的文件夹中,然后从他们的任务中加载您的任务。

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

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

<强> 2。使用1 Git-Repo并通过NPM安装

根据需要创建具有任意数量的任务的存储库。一个任务应该驻留在一个文件中(它只适用于1个文件,但我不推荐它)

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

// task2.js
grunt.registerMultiTask(task2", "run task2", function() {

});

然后你可以在你的项目中安装git-repo作为一个简单的dev-dependency:

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

要使其工作,您的Gruntfile需要为两个任务配置目标


我会做什么

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

将对社区有用的任务发布到npm-registry。使用grunt-init gruntplugin创建新任务。


关于您的构建流程:

只需在你的gruntfile中添加一个alias-task,其中包含你想要在新提交上运行的所有任务:

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

并配置jenkins以运行此任务(您需要在Projects-Config中添加git-hook和 Source-Code-Management ),并将shell脚本配置为Build-Step:

npm install && grunt jenkins

甚至更好,在package.json中添加scripts-section并使用test-command。

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

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

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

Grunt: custom task development how-to