使Grunt Usemin HTML任务创建新文件而不是重写

时间:2015-01-23 03:17:19

标签: javascript gruntjs yeoman grunt-usemin

我有一个简单的Gruntfile,使用带有Yeoman生成器的基本默认配置的usemin。我需要能够创建一个新的html文件,而不是重写html文件。这是我希望的工作:

useminPrepare: {
  html: 'index.tpl',
  options: {
    dest: '.',
    flow: {
      html: {
        steps: {
          js: ['concat', 'uglifyjs'],
          css: ['cssmin']
        },
        post: {}
      }
    }
  }
},

usemin: {
  html: {
    src: 'index.tpl',
    dest: 'index.html'
  }
}

这样的事情可能吗?

1 个答案:

答案 0 :(得分:0)

这还不可能。 实际上唯一的方法是使用grunt-contrib-copy(或这样的插件)来复制index.html文件,然后使用usemin任务更改副本。

以下是此解决方案的示例: (来自mvolkmann在https://github.com/yeoman/grunt-usemin/issues/176的帖子)

module.exports = function (grunt) {
  grunt.initConfig({
    clean: ['build'],
    copy: {
      html: { // in preparation for usemin
        files: [
          {src: 'index.html', dest: 'build/'}
        ]
      }
    }, 
    uglify: {
      all: {
        files: {
          'build/output.min.js': ['lib/angular.min.js', 'scripts/*.js']
        }
      }
    },
    useminPrepare: {
      options: {dest: 'build'}
    },
    usemin: {
      html: 'build/index.html', // must have this
      //css: '*.css',
      options: {
        dirs: ['lib', 'scripts']
      }
    },
  });

  var tasks = [
    'grunt-contrib-clean',
    'grunt-contrib-copy',
    'grunt-contrib-cssmin',
    'grunt-contrib-uglify',
    'grunt-usemin'
  ];
  tasks.forEach(grunt.loadNpmTasks);

  grunt.registerTask('min', ['copy', 'useminPrepare', 'uglify', 'usemin']);
};