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

Make Grunt Usemin HTML Task Create New File Instead Of Rewriting

我有一个简单的 Gruntfile,它使用 usemin 和来自 Yeoman 生成器的基本默认配置。我需要能够创建一个新的 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'
  }
}

这样的事情可能吗?

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

这是此解决方案的一个示例: (来自 mvolkmann 在 https://github.com/yeoman/grunt-usemin/issues/176 的 post)

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']);
};