为什么Grunt Copy给了我一个'undefined不是函数'警告
Why is Grunt Copy giving me an 'undefined is not a function' warning?
我使用Grunt作为构建工具(惊喜),使用grunt-contrib-copy
作为调试和早期开发工具。我已经搜索了我的代码多次,但我不明白为什么会出现错误。这是我的密码。
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.
尽管这不起作用:
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'
}
}
}
这样做:
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'
}
]
}
}
"files"只是期望一个对象数组,这就是为什么如果只给定一个复制任务,它就可以与单个对象一起工作。。没有线索:)
我不确定为什么会这样,但对于那些有类似问题的人来说,这就是我的代码的问题所在:
Copy不允许我在其中创建子对象,就像我认为所有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
中的一个错误,或者我的发现是不正确的。我也不喜欢。
相关文章:
- chrome扩展更改主机/域警告
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- /undefined在我的404错误日志中多次出现
- RequireJS向模块传递配置总是返回undefined
- JSON数组数据返回Undefined
- 为什么会出现错误,“UncaughtTypeError:undefined不是函数”
- Array.lenght = undefined
- mongoose.connect undefined不是一个函数
- JavaScript”;.方法“;返回undefined
- Uncaught TypeError:undefined不是函数-ember js
- 如何永久停止jshint'只读'警告/错误
- Jquery - table.row(tr) is undefined
- jQuery可以't获取data-*属性值,返回undefined
- noty.js is returning undefined
- JShint-.jshintrc中的ES6有esversion,但仍收到警告(使用atom)
- 将对象的列表c#传递给javascript:undefined变量时出错
- $routeParams is undefined
- 为什么Grunt Copy给了我一个'undefined不是函数'警告
- 警告:反应.createElement: type不应该是null、undefined、boolean或number
- 所以我使用一个全局变量,为什么这段代码返回一个'undefined'的警告