我刚开始使用Grunt,我希望有一个可以定义常见任务的公共项目。之后,每个团队都可以创建自己的项目,并能够将我的公共项目添加为依赖项并运行常见任务。
当您想要向FE构建管道添加一些预定义任务时,也很有用。当有人将该项目推送到github并尝试使用它构建它时,让我们说,詹金斯,然后我想默认运行其他任务(如jslint,uglify,compress,nexus deploy等)。
我尝试通过创建包含所有这些常见任务的grunt项目,然后将其作为依赖项添加到其他项目中来实现。问题是我无法从外部项目运行常见任务。还有另一种方法可以达到这个目的吗?
答案 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
这是另一个关于自定义任务开发的答案: