为 Yeoman 创建 Gruntfile 文件

写入一个文件通常是一个简单的任务:编写一个字符串,并使用文件系统API将其写入到输出文件中。然而,当遇到不同时,问题将会发生,(希望可组合的)generators必须写入到相同的文件。每次写动作都会出现冲突提示,这不是一个终端用户好的体验。

这就是为什么Yeoman包含了最常用的编辑过的文件,Gruntfile.js只是个假象。接下来,介绍Yeoman Gruntfile编辑器的API。

Gruntfile 编辑器 API

在generator上下文中有一个新的对象,this.gruntfile对象,它现在是可以访问的。这个对象是一个由gruntfile-editor模块提供的GruntfileEditor实例。

作为一个快速的例子,你可能会用这种方式:

module.exports = generators.Base.extend({
  writing: function () {
    this.gruntfile.insertConfig("compass", "{ watch: { watch: true } }");
  }
});

Yeoman会加载当前项目的Gruntfile.js文件(或默认模板),在生成过程的末尾将文件写入磁盘。插入一个配置块,并且Yeoman会关注文件中的所有其它文件。

Gruntfile 编辑器的方法

请参考 gruntfile-editor 模块文档的完整API。

insertConfig

this.gruntfile.insertConfig( name, config )

这种方式插入一个配置块,在grunt.initConfig()中调用。

例如:

this.gruntfile.insertConfig("compass", "{ watch: { watch: true } }");

上面的这一行代码将在Gruntfile中输出以下几个部分:

grunt.initConfig({
  compass: {
    watch: { watch: true }
  }
});

registerTask

this.gruntfile.registerTask( name, tasks )

这种方式在命名任务组注册一个任务。例如:

this.gruntfile.registerTask('build', 'compass');
// 输出: grunt.registerTask('build', ['compass']);

this.gruntfile.registerTask('build', ['compass', 'uglify']);
// 输出: grunt.registerTask('build', ['compass', 'uglify']);

如果这个命名的任务已经存在,这个任务将被添加到该任务数组的末尾。

发现一个错误?一个不清楚的例子?通过派生并发送你的修改和建议来帮助我们改进文档。改善此页面!