在 Gulp 中运行 Grunt 任务或者 Grunt 插件是可能的。这在从 Grunt 迁移到 Gulp 阶段或者你对某个 Grunt 插件有需求的时候会非常有用。按照如下描述的方法,不需要引入 Grunt 命令行工具或者 Gruntfile。
这个方法需要 Grunt 版本 >=1.0.0
非常简单的 gulpfile.js
示例:
// npm install gulp grunt grunt-contrib-copy --save-dev
var gulp = require('gulp');
var grunt = require('grunt');
grunt.initConfig({
copy: {
main: {
src: 'src/*',
dest: 'dest/'
}
}
});
grunt.loadNpmTasks('grunt-contrib-copy');
gulp.task('copy', function (done) {
grunt.tasks(
['copy:main'], // 你可以在这个数组中加入更多的 Grunt 任务
{gruntfile: false}, // 不查找 Gruntfile - 因为并没有. :-)
function () {done();}
);
});
现在开始执行任务:
gulp copy
通过上述方式,grunt 任务会被注册到 gulp 的任务系统中。需要注意的是,grunt 任务通常是阻塞的(不像 gulp),因此在 grunt 任务执行完成之前,没有任何其他的任务可以执行(甚至 gulp 任务也不可以)。
有一个 gulp友好 的 node 模块 gulp-grunt
可以使用 ,它使用了一个不同的方案。它会创建一些子进程来执行 grunt 任务,这意味着它有一些限制:
gulp-grunt
还不能把类似命令行参数或者其他的选项参数传递到 grunt 任务中