JavaScript-Grunt watch pattern.indexOf不是函数
作者:互联网
我正在尝试使用Grunt的grunt-contrib-watch插件来观看一些文件,然后运行任务,正是它的目的所在,这就是我的Gruntfile.js
module.exports = function(grunt){
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
sass: {
options: {
sourceMap: true,
outputStyle: 'compressed'
},
dist: {
files: {
'static/stylesheets/main.min.css': 'static/stylesheets/sass/main.scss',
/*'bower_components/foundation-sites/dist/foundation.min.css': 'bower_components/foundation-sites/scss/foundation.scss'*/
}
}
},
uglify: {
dist: {
files: {
'static/javascript/main.min.js': 'static/javascript/main.js'
}
}
},
watch: {
files: [
'<%= sass.dist.files %>',
'<%= uglify.dist.files %>'
],
tasks: [
'sass',
'uglify'
]
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-sass');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['watch']);
};
当我运行它时,它一遍又一遍地运行,当我停止它时,我看到以下消息:
Running “watch” task
Waiting…
Warning: pattern.indexOf is not a function
我真的不知道出什么问题了.有人知道这里会发生什么吗?
更新:
显然,问题出在我调用文件的方式上,因为我将其更改为:“ static / stylesheets / sass / *.scss”,而且效果很好,但是我想知道为什么其他方式不起作用,因为我认为这是一种更有用的方法.
解决方法:
grunt-contrib-watch期望单个模式字符串或模式字符串数组作为其文件config的值.但是,您在配置中使用的模板会评估为对象.您的watch.files值的计算结果如下:
files: [
{ 'static/stylesheets/main.min.css': 'static/stylesheets/sass/main.scss' },
{ 'static/javascript/main.min.js': 'static/javascript/main.js' }
]
模式匹配尝试运行时会失败,因为对象上没有indexOf方法.由于grunt-contrib-watch会永远运行,因此,尝试构建和失败构建监视文件列表的过程存在无限循环.
通常,您可以使用以下内容配置监视文件:
files: [
'static/**/*.scss',
'static/**/*.js'
]
但是上述情况会导致问题,因为缩小的JS文件与源JS文件位于同一文件夹中.您可以通过在文件数组中添加’!static / ** / *.min.js’来解决此问题,但是更好的解决方案是将所有已编译文件放入单独的文件夹中.
标签:grunt-contrib-watch,gruntjs,javascript 来源: https://codeday.me/bug/20191026/1938788.html