Javascript grunt watch跳过了我的一些任务,为什么?
我已经设置了一个grunt文件来自动化我的一些任务。我还将我的手表任务划分为更小的子任务,以便于执行 每个任务过去都运行得很好,但现在看来watch在发生文件更改时缺少了一些文件更改。例如,它将检测我的SCS中的更改并编译它。但它将错过编译css中的后续更改,并跳过autoprefix和ftp部署 我怎样才能纠正这个问题?我是否需要使用去BounceDelay,是我的手表“繁殖”设置错误,还是有其他问题Javascript grunt watch跳过了我的一些任务,为什么?,javascript,css,gruntjs,watch,Javascript,Css,Gruntjs,Watch,我已经设置了一个grunt文件来自动化我的一些任务。我还将我的手表任务划分为更小的子任务,以便于执行 每个任务过去都运行得很好,但现在看来watch在发生文件更改时缺少了一些文件更改。例如,它将检测我的SCS中的更改并编译它。但它将错过编译css中的后续更改,并跳过autoprefix和ftp部署 我怎样才能纠正这个问题?我是否需要使用去BounceDelay,是我的手表“繁殖”设置错误,还是有其他问题 module.exports = function(grunt) { // Load
module.exports = function(grunt) {
// Load all grunt tasks matching the `grunt-*` pattern
require('load-grunt-tasks')(grunt);
// All configuration goes here
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
// Template strings for directories
dirs: {
// Dev
dev_js: 'js',
dev_css: 'css',
dev_scss: 'scss',
dev_js_authored: '<%= dirs.dev_js %>/authored',
dev_js_libs: '<%= dirs.dev_js %>/libs',
dev_js_build: '<%= dirs.dev_js %>/build',
dev_css_build: '<%= dirs.dev_css %>/build',
// Production
prod_server_root: '/wp-content/themes',
prod_current_theme: '<%= dirs.prod_server_root %>/themename',
prod_css: '<%= dirs.prod_current_theme %>/css'
},
// Template strings for ftp
ftp_cred: {
prod_host: 'ip-here',
prod_auth: 'auth-here'
},
// Concatenate
concat: {
js: {
src: [
'<%= dirs.dev_js_libs %>/*.js',
'<%= dirs.dev_js_authored %>/*.js'
],
dest: '<%= dirs.dev_js_build %>/production.js'
}
},
// Minify
uglify: {
js: {
src: '<%= dirs.dev_js_build %>/production.js',
dest: '<%= dirs.dev_js_build %>/production.min.js'
}
},
// Sass
sass: {
compile: {
options: {
style: 'compressed'
},
files: {
'css/build/unprefixed.min.css': 'scss/global.scss'
}
}
},
// Autoprefixer
autoprefixer: {
prefix: {
single_file: {
src: '<%= dirs.dev_css_build %>/unprefixed.min.css',
dest: '<%= dirs.dev_css_build %>/production.min.css'
}
}
},
// FTP
'ftp-deploy': {
css: {
build: {
auth: {
host: '<%= ftp_cred.prod_host %>',
port: 21,
authKey: '<%= ftp_cred.prod_auth %>'
},
src: '<%= dirs.dev_css %>',
dest: '<%= dirs.prod_css %>',
exclusions: ['<%= dirs.dev_css_build %>/unprefixed.min.css']
}
}
},
// Watch
watch: {
scripts_concat: {
files: ['<%= dirs.dev_js_authored %>/*.js','<%= dirs.dev_js_libs %>/*.js'],
tasks: ['concat:js']
},
scripts_min: {
files: ['<%= dirs.dev_js_build %>/production.js'],
tasks: ['uglify:js']
},
scss_compile: {
files: ['<%= dirs.dev_scss %>/**/*.scss'],
tasks: ['sass:compile']
},
css_prefix: {
files: ['<%= dirs.dev_css_build %>/unprefixed.min.css'],
tasks: ['autoprefixer:prefix']
},
ftp_css: {
files: ['<%= dirs.dev_css_build %>/production.min.css'],
tasks: ['ftp-deploy:css']
},
livereload: {
options: { livereload: true },
files: ['<%= dirs.dev_css_build %>/production.min.css','<%= dirs.dev_js_build %>/production.min.js']
}
}
});
// Load required plugins
require('load-grunt-tasks')(grunt);
// Define what to do at which command
grunt.registerTask('default', ['watch']);
};
module.exports=函数(grunt){
//加载与'grunt-*'模式匹配的所有grunt任务
要求('load-grunt-tasks')(grunt);
//所有配置都在这里
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
//目录的模板字符串
目录:{
//发展
dev_js:'js',
dev_css:'css',
开发人员scss:“scss”,
dev_js_authored:“/authored”,
dev_js_libs:“/libs”,
dev_js_build:“/build”,
dev_css_build:“/build”,
//生产
prod_server_root:“/wp content/themes”,
产品当前主题:“/themename”,
产品css:“/css”
},
//ftp的模板字符串
ftp_cred:{
prod_主机:“ip在此”,
prod_auth:“在此处进行身份验证”
},
//连接
concat:{
js:{
src:[
“/*.js”,
“/*.js”
],
dest:“/production.js”
}
},
//缩小
丑陋的:{
js:{
src:'/production.js',
dest:“/production.min.js”
}
},
//无礼
sass:{
汇编:{
选项:{
样式:“压缩”
},
档案:{
“css/build/unfixed.min.css”:“scss/global.scss”
}
}
},
//自动刷新器
自动刷新器:{
前缀:{
单个文件:{
src:“/unfixed.min.css”,
dest:“/production.min.css”
}
}
},
//FTP
“ftp部署”:{
css:{
建造:{
认证:{
主机:“”,
港口:21,
身份验证密钥:“”
},
src:“”,
目标:'',
排除项:['/unfixed.min.css']
}
}
},
//监视
观察:{
脚本\u concat:{
文件:['/*.js','/*.js'],
任务:['concat:js']
},
脚本(u min):{
文件:['/production.js'],
任务:['uglify:js']
},
scss_编译:{
文件:['/***.scss'],
任务:['sass:compile']
},
css_前缀:{
文件:['/unfixed.min.css'],
任务:['autoprefixer:prefix']
},
ftp_css:{
文件:['/production.min.css'],
任务:['ftp-deploy:css']
},
利弗雷罗德:{
选项:{livereload:true},
文件:['/production.min.css','/production.min.js']
}
}
});
//加载所需的插件
要求('load-grunt-tasks')(grunt);
//定义在哪个命令下执行的操作
registerTask('default',['watch']);
};
如果运行grunt watch:scss\u compile
,ftp\u css
任务将不会运行,因此对production.min.css的更改不会触发ftp部署
因此,您可能希望在计算机的帮助下同时运行两个watch
任务
然后:
有关更多详细信息,请参阅参考资料:
但是,我会将watch
任务分为两个块:js
和css
,因为我假设所有与css
相关的任务都必须在发生更改时运行。我会这样做:
css: {
files: ['<%= dirs.dev_scss %>/**/*.scss'],
tasks: ['sass:compile', 'autoprefixer:prefix', 'ftp-deploy:css', 'watch:livereload']
},
livereload: {
options: { livereload: true },
files: [
'<%= dirs.dev_css_build %>/production.min.css',
'<%= dirs.dev_js_build %>/production.min.js'
]
}
css:{
文件:['/***.scss'],
任务:['sass:compile','autoprefixer:prefix','ftp deploy:css','watch:livereload']
},
利弗雷罗德:{
选项:{livereload:true},
档案:[
“/production.min.css”,
“/production.min.js”
]
}
好的,所以我发现了错误(这是我正在查看并将文件输出到的文件夹中的一个错误)。最后,我将watch部分更改为一个较小的有意义的任务链集合,如下所示:
watch: {
js_prod: {
files: ['<%= dirs.dev_js_authored %>/*.js','<%= dirs.dev_js_libs %>/*.js'],
tasks: ['concat:js','uglify:js','ftp-deploy:js_prod','clean:temp_js']
},
js_standalone: {
files: ['<%= dirs.dev_js_standalone %>/*.js'],
tasks: ['ftp-deploy:js_standalone']
},
css_prod: {
files: ['<%= dirs.dev_scss %>/**/*.scss'],
tasks: ['sass:compile','autoprefixer:prefix','ftp-deploy:css_prod']
},
css_ie: {
files: ['<%= dirs.dev_css_ie %>/*.css','!<%= dirs.dev_css_ie %>/*.min.css'],
tasks: ['cssmin:ie','ftp-deploy:css_ie','clean:temp_css_ie']
},
livereload: {
options: { livereload: true },
files: [
'<%= dirs.dev_css %>/**/*.css',
'<%= dirs.dev_js_build %>/production.min.js',
'<%= dirs.dev_js_standalone %>/*.js']
}
}
观察:{
js_产品:{
文件:['/*.js','/*.js'],
任务:['concat:js'、'uglify:js'、'ftp-deploy:js_prod'、'clean:temp_js']
},
js_单机版:{
文件:['/*.js'],
任务:['ftp-deploy:js_standalone']
},
css_产品:{
文件:['/***.scss'],
任务:['sass:compile','autoprefixer:prefix','ftp-deploy:css_prod']
},
css_ie:{
文件:['/*.css','!/*.min.css'],
任务:['cssmin:ie'、'ftp-deploy:css\u-ie'、'clean:temp\u-css\u-ie']
},
利弗雷罗德:{
选项:{livereload:true},
档案:[
“/***/.css”,
“/production.min.js”,
'/*.js']
}
}
这很好,而且我对监视任务没有任何问题,因为我不会同时在他们监视的任何区域工作
css: {
files: ['<%= dirs.dev_scss %>/**/*.scss'],
tasks: ['sass:compile', 'autoprefixer:prefix', 'ftp-deploy:css', 'watch:livereload']
},
livereload: {
options: { livereload: true },
files: [
'<%= dirs.dev_css_build %>/production.min.css',
'<%= dirs.dev_js_build %>/production.min.js'
]
}
watch: {
js_prod: {
files: ['<%= dirs.dev_js_authored %>/*.js','<%= dirs.dev_js_libs %>/*.js'],
tasks: ['concat:js','uglify:js','ftp-deploy:js_prod','clean:temp_js']
},
js_standalone: {
files: ['<%= dirs.dev_js_standalone %>/*.js'],
tasks: ['ftp-deploy:js_standalone']
},
css_prod: {
files: ['<%= dirs.dev_scss %>/**/*.scss'],
tasks: ['sass:compile','autoprefixer:prefix','ftp-deploy:css_prod']
},
css_ie: {
files: ['<%= dirs.dev_css_ie %>/*.css','!<%= dirs.dev_css_ie %>/*.min.css'],
tasks: ['cssmin:ie','ftp-deploy:css_ie','clean:temp_css_ie']
},
livereload: {
options: { livereload: true },
files: [
'<%= dirs.dev_css %>/**/*.css',
'<%= dirs.dev_js_build %>/production.min.js',
'<%= dirs.dev_js_standalone %>/*.js']
}
}