为不可多任务的grunt插件创建两个配置
Create two configurations for a grunt plug-in that is not multi-taskable
我用的是grunt包grunt-preprocess,显然不支持多任务
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
})
现在我想执行preprocess
两次,一次从src
目录,一次从dist
目录。我应该如何配置这个包来实现它?
我试过这个配置;
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
first: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
second: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'dist/',
dest: 'dist',
expand: true
}
}
}
})
然后执行grunt preprocess:first
。但是它不起作用:
PS D:\workspace\environment-compile> grunt preprocess:first
Running "preprocess:first" (preprocess) task
Done.
是的,你是对的 preprocess
只是单个任务,因此不允许定义多个 targets。
您需要创建另一个动态配置 preprocess
任务的自定义任务,然后 运行 执行它。
例如:
Gruntfile.js
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-preprocess');
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
// ...
});
// Custom task dynamically configures the `preprocess` Task and runs it.
grunt.registerTask('preprocess_dist', function() {
grunt.config.set('preprocess.all_from_dir.cwd', 'dist/');
grunt.config.set('preprocess.all_from_dir.dest', 'dist');
grunt.task.run(['preprocess']);
});
grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);
};
运行:
通过您的 CLI 运行 以下单个命令执行 preprocess
任务两次,一次来自 src
目录,一次来自 dist
目录:
grunt preprocessBoth
解释:
- 名为
preprocess_dist
的自定义任务动态配置 cwd
和 dest
属性的值,分别将它们设置为 'dist/'
和 'dist'
。这是通过 grunt.config.set
方法 完成的
- 然后任务是运行通过
grunt.task.run
方法。
最后一行代码写着:
grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);
创建一个名为 preprocessBoth
的任务并将以下两个任务添加到 taskList
:
preprocess
preprocess_dist
基本上当你 运行 grunt preprocessBoth
时会发生什么:
preprocess
任务 运行 使用 src
目录中的文件。
- 然后自定义
preprocess_dist
任务 运行s 使用 dist
目录中的文件。
如果您愿意,您还可以通过 CLI 独立地 运行 每个任务,即:
grunt preprocess
和
grunt preprocess_dist
我用的是grunt包grunt-preprocess,显然不支持多任务
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
})
现在我想执行preprocess
两次,一次从src
目录,一次从dist
目录。我应该如何配置这个包来实现它?
我试过这个配置;
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
first: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
second: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'dist/',
dest: 'dist',
expand: true
}
}
}
})
然后执行grunt preprocess:first
。但是它不起作用:
PS D:\workspace\environment-compile> grunt preprocess:first Running "preprocess:first" (preprocess) task Done.
是的,你是对的 preprocess
只是单个任务,因此不允许定义多个 targets。
您需要创建另一个动态配置 preprocess
任务的自定义任务,然后 运行 执行它。
例如:
Gruntfile.js
module.exports = function (grunt) {
grunt.loadNpmTasks('grunt-preprocess');
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess: {
options: {
context: {
ENV: grunt.option('env') || 'prod'
},
},
all_from_dir: {
src: '*.*',
cwd: 'src/',
dest: 'src',
expand: true
}
},
// ...
});
// Custom task dynamically configures the `preprocess` Task and runs it.
grunt.registerTask('preprocess_dist', function() {
grunt.config.set('preprocess.all_from_dir.cwd', 'dist/');
grunt.config.set('preprocess.all_from_dir.dest', 'dist');
grunt.task.run(['preprocess']);
});
grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);
};
运行:
通过您的 CLI 运行 以下单个命令执行 preprocess
任务两次,一次来自 src
目录,一次来自 dist
目录:
grunt preprocessBoth
解释:
- 名为
preprocess_dist
的自定义任务动态配置cwd
和dest
属性的值,分别将它们设置为'dist/'
和'dist'
。这是通过grunt.config.set
方法 完成的
- 然后任务是运行通过
grunt.task.run
方法。 最后一行代码写着:
grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);
创建一个名为
preprocessBoth
的任务并将以下两个任务添加到taskList
:preprocess
preprocess_dist
基本上当你 运行
grunt preprocessBoth
时会发生什么:preprocess
任务 运行 使用src
目录中的文件。- 然后自定义
preprocess_dist
任务 运行s 使用dist
目录中的文件。
如果您愿意,您还可以通过 CLI 独立地 运行 每个任务,即:
grunt preprocess
和
grunt preprocess_dist