我有以下结构:

src/
    modules/
        module1/
            js/
                main.js
            scss/
                main.scss
            index.html
        module2/
            js/
                main.js
            scss/
                main.scss
            index.html

我想执行一个艰巨的任务,将其复制到以下结构中:
dev/
    js/
        module1.js
        module2.js
    css/
        module1.css
        module2.css
    module1.html
    module2.html

有没有办法使用现有的grunt插件来做到这一点?如果没有,我该如何实现?

最佳答案

这可以使用grunt-contrib-copy插件来完成。

需要注意的主要事情是,您可以使用重命名功能(接收每个文件的目标和源)以编程方式更改目标。

这是一个(有些脆弱)示例Gruntfile.js,应复制到所需的结构中:

module.exports = function(grunt) {
  // Project configuration.
  grunt.initConfig({
    copy: {
      main: {
        files: [
          {
            expand: true,
            cwd: 'src/modules/',
            src: ['**/*.js'],
            dest: 'dev/js/',
            rename: function(dest, src) {
              // use the source directory to create the file
              // example with your directory structure
              //   dest = 'dev/js/'
              //   src = 'module1/js/main.js'
              return dest + src.substring(0, src.indexOf('/')) + '.js';
            }
          },
          {
            expand: true,
            cwd: 'src/modules/',
            src: ['**/*.scss'],
            dest: 'dev/css/',
            rename: function(dest, src) {
              return dest + src.substring(0, src.indexOf('/')) + '.css';
            }
          },
          {
            expand: true,
            cwd: 'src/modules/',
            src: ['**/*.html'],
            dest: 'dev/',
            rename: function(dest, src) {
              return dest + src.substring(0, src.indexOf('/')) + '.html';
            }
          }
        ]
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-copy');

  // Default task(s).
  grunt.registerTask('default', ['copy']);
};

09-10 04:44
查看更多