2015-04-02 87 views
0

我使用Grunt作为构建工具(惊喜),我使用grunt-contrib-copy作为调试和早期开发工具。我已经多次查看过我的代码,但我不明白为什么会出现错误。这是我的代码。Grunt Copy为什么给我一个'undefined不是函数'警告?

Gruntfile.js

module.exports = function(grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     concurrent: { 
      watch: { 
       options: { 
        logConcurrentOutput: true 
       }, 
       tasks: ['watch:css', 'watch:html', 'watch:js', 'watch:img'] 
      } 
     }, 
     watch: { 
      css: { 
       files: ['./src/scss/*.scss'], 
       tasks: ['sass', 'autoprefixer'] 
      }, 
      js: { 
       files: ['./src/js/*.js'], 
       tasks: ['copy:js'] 
      }, 
      html: { 
       files: ['./src/html/*.html'], 
       tasks: ['copy:html'] 
      }, 
      img: { 
       files: ['./src/img/*'], 
       tasks: ['copy:img'] 
      } 
     }, 
     sass: { 
      files: { 
       expand: true, 
       cwd: './src/scss/', 
       src: ['*.scss'], 
       dest: './src/no-prefix-css', 
       ext: '.css' 
      } 
     }, 
     autoprefixer: { 
      options: { 
       browsers: ['all'] 
      }, 
      files: { 
       expand: true, 
       cwd: './src/no-prefix-css', 
       src: ['*.css'], 
       dest: './build/css/', 
      } 
     }, 





     // Affected code 
     copy: { 
      html: { 
       files: { 
        expand: true, 
        cwd: './src/html/', 
        src: ['*.html'], 
        dest: './build/html/' 
       } 
      }, 
      js: { 
       files: { 
        expand: true, 
        cwd: './src/js/', 
        src: ['*.js'], 
        dest: './build/js/' 
       } 
      }, 
      img: { 
       files: { 
        expand: true, 
        cwd: './src/img/', 
        src: ['*.bmp', '*.jpg', '*.jpeg', '*.svg', '*.png'], 
        dest: './build/img/' 
       } 
      } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
    grunt.loadNpmTasks('grunt-contrib-copy'); 
    grunt.loadNpmTasks('grunt-autoprefixer'); 
    grunt.loadNpmTasks('grunt-concurrent'); 

    grunt.registerTask('default', 'Run build tools', ['concurrent:watch']); 
} 

这里是输出当我运行grunt copy:html -v

Initializing 
Command-line options: --verbose 

Reading "Gruntfile.js" Gruntfile...OK 

Registering Gruntfile tasks. 
Reading package.json...OK 
Parsing package.json...OK 
Initializing config...OK 

Registering "grunt-contrib-watch" local Npm module tasks. 
Reading C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-watch\pack 
age.json...OK 
Parsing C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-watch\pack 
age.json...OK 
Loading "watch.js" tasks...OK 
+ watch 

Registering "grunt-contrib-sass" local Npm module tasks. 
Reading C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-sass\packa 
ge.json...OK 
Parsing C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-sass\packa 
ge.json...OK 
Loading "sass.js" tasks...OK 
+ sass 

Registering "grunt-contrib-copy" local Npm module tasks. 
Reading C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-copy\packa 
ge.json...OK 
Parsing C:\Projects\tonal-music-visualizer\node_modules\grunt-contrib-copy\packa 
ge.json...OK 
Loading "copy.js" tasks...OK 
+ copy 

Registering "grunt-autoprefixer" local Npm module tasks. 
Reading C:\Projects\tonal-music-visualizer\node_modules\grunt-autoprefixer\packa 
ge.json...OK 
Parsing C:\Projects\tonal-music-visualizer\node_modules\grunt-autoprefixer\packa 
ge.json...OK 
Loading "autoprefixer.js" tasks...OK 
+ autoprefixer 

Registering "grunt-concurrent" local Npm module tasks. 
Reading C:\Projects\tonal-music-visualizer\node_modules\grunt-concurrent\package 
.json...OK 
Parsing C:\Projects\tonal-music-visualizer\node_modules\grunt-concurrent\package 
.json...OK 
Loading "concurrent.js" tasks...OK 
+ concurrent 
Loading "Gruntfile.js" tasks...OK 
+ default 

Running tasks: copy:html 

Running "copy:html" (copy) task 
Verifying property copy.html exists in config...OK 
Warning: undefined is not a function Use --force to continue. 

Aborted due to warnings. 

回答

0

我不确定这是为什么,但对于那些有类似的问题,这是什么毛病我的代码:

复制不允许我在其中创建子对象,就像我认为所有Grunt命令都被允许。为了解决我的问题,我改变了我的代码如下所示:

copy: { 
    default: { 
     files: [ 
     { 
      expand: true, 
      cwd: './src/html/', 
      src: ['*.html'], 
      dest: './build/html/' 
     }, 
     { 
      expand: true, 
      cwd: './src/js/', 
      src: ['*.js'], 
      dest: './build/js/' 
     }, 
     { 
      expand: true, 
      cwd: './src/img/', 
      src: ['*'], 
      dest: './build/img/' 
     }] 
    } 
} 

显然复制需要一个子对象,但它不能处理多者。如果有人可以提供此功能的原因,我会非常高兴。似乎这可能被认为是grunt-contrib-copy中的一个错误,或者我的发现不正确。我也不喜欢。

2

虽然这不起作用:

copy: { 
     buildImages: { 
      files: { 
        expand: true, 
        cwd: paths.dev.cssImages, 
        src: '**/*', 
        dest: paths.prod.cssImages, 
        filter: 'isFile' 
       } 
     }, 
     buildBlub: { 
      files: { 
        expand: true, 
        cwd: paths.dev.cssImages, 
        src: '**/*', 
        dest: paths.prod.cssImages, 
        filter: 'isFile' 
       } 
     } 
    } 

..this做:

copy: { 
     buildImages: { 
      files: [ 
       { 
        expand: true, 
        cwd: paths.dev.cssImages, 
        src: '**/*', 
        dest: paths.prod.cssImages, 
        filter: 'isFile' 
       } 
      ] 
     }, 
     buildBlub: { 
      files: [ 
       { 
        expand: true, 
        cwd: paths.dev.cssImages, 
        src: '**/*', 
        dest: paths.prod.cssImages, 
        filter: 'isFile' 
       } 
      ] 
     } 

    } 

“文件”只是希望对象的数组,为什么它与单个对象的作品,如果只有一个复制任务给出..没有线索:)

相关问题