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

标签 javascript node.js build gruntjs build-process

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

当您想要向 FE 构建管道添加一些预定义任务时也很有帮助。当有人将该项目推送到 github 并尝试使用 Jenkins 来构建它时,我还想默认运行一些其他任务(如 jslint、uglify、compress、nexus 部署等)。

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

最佳答案

不太喜欢尝试将所有任务放入一个存储库并将它们拉入,但这是可能的。

我以前没有这样做过(我已经从目录中完成了 loadTasks,它就可以工作),而且我不喜欢它。但我看到有两种可能性:

<强>1。使用子模块

你可以使用git submodules将您的任务存储库拉入项目存储库的文件夹中,并从其中加载您的任务。

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

grunt.loadTasks "./your-git-submodule-folder"
<小时/>

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

创建一个存储库,其中包含您想要的任意数量的任务。一个任务应该驻留在 1 个文件中(它仅适用于 1 个文件,但我不推荐它)

// 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 需要为这两个任务配置目标

<小时/>

我会做什么

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

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

<小时/>

关于您的构建过程:

只需将别名任务添加到您的 gruntfile 中,其中包含您想要在新提交上运行的所有任务:

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

并配置您的jenkins来运行此任务(您需要在项目配置中添加git-hook和源代码管理),并将shell脚本配置为构建步骤:

npm install && grunt jenkins

或者更好的是,添加 scripts-section到你的 package.json 并使用测试命令。

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

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

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

Grunt: custom task development how-to

关于javascript - Grunt - 如何从外部项目运行常见的外部任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25160079/

相关文章:

javascript - YUI 事件似乎不能递归工作

javascript - Google map API - 自动完成英国县

javascript - 为什么 "~undefined"在 JavaScript 中是 -1?

node.js - Node.js 中的多个并发操作

javascript - Express.js - 监听关机

javascript - Grunt-browserify+mapify+coffeescript = 未找到具有相对路径的模块

java - 如何在 Eclipse ADT 中调试库

node.js - Nodejs 构建 sublime-text2

java - 如何从一个项目构建多个独立的 Gradle 项目?

javascript - 在 setTimeout 中调用相同的函数