2015-04-02 103 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' 
       } 
      ] 
     } 

    } 

「文件」只是希望對象的數組,爲什麼它與單個對象的作品,如果只有一個複製任務給出..沒有線索:)

相關問題