Grunt 不看 JS 文件
Grunt Does Not Watch JS files
我在这个问题上花了一个多小时,浏览了几个问题,但找不到答案。
我在 javascript 文件上使用 watch 时遇到了问题。监视所有其他文件并正确执行任务。
如果我 运行 从一开始就使用默认值,concat 和 uglify 工作得很好,但是如果我对 js 文件进行任何更改,watch 将直接忽略它。
这是我的文件:
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
index: {
src: ['js/shared/*.js', 'js/index/*.js'],
dest: 'js/concat/index.js',
},
page: {
src: ['js/shared/*.js', 'js/page/*.js'],
dest: 'js/concat/page.js',
},
},
uglify: {
dist: {
files:{
'js/build/index.min.js': 'js/concat/index.js',
'js/build/page.min.js': 'js/concat/page.js',
}
}
},
sass: {
options: {
outputStyle: 'compressed',
},
dist: {
files: {
'css/main-unprefixed.css': 'sass/main.scss'
}
}
},
autoprefixer: {
global: {
src: 'css/main-unprefixed.css',
dest: 'css/main.css'
}
},
jade: {
compile: {
options: {
pretty: true
},
files: [{
expand: true,
cwd: '',
src: [ '_layouts/jade/*.jade' ],
dest: '_layouts',
flatten: true,
ext: '.html'
}]
}
},
shell: {
jekyllServe: {
command: "jekyll serve --no-watch"
},
jekyllBuild: {
command: "jekyll build"
}
},
open : {
build: {
path: 'http://localhost:4000',
app: 'Firefox'
}
},
watch: {
options: {
livereload: true
},
site: {
files: ["*.html", "**/*.html", "*.md", "**/*.md", "**/*.yml", "*.yml", "!_site/*.*", "!_site/**/*.*"],
tasks: ["shell:jekyllBuild"]
},
scripts: {
files: ["js/*.js", "js/**/*.js"],
tasks: ["concat", "uglify", "shell:jekyllBuild"]
},
jade: {
files: ["_layouts/jade/*.jade"],
tasks: ["jade"]
},
css: {
files: ["sass/*.scss", "sass/**/*.scss", "sass/**/**/*.scss"],
tasks: ["sass", "autoprefixer", "shell:jekyllBuild"]
}
}
});
require('load-grunt-tasks')(grunt);
// Default task(s).
grunt.registerTask("serve", ["shell:jekyllServe"]);
grunt.registerTask("default", ["open", "concat", "uglify", "sass", "autoprefixer", "jade", "shell:jekyllBuild", "watch"]);
};
非常感谢任何帮助。
问题出在您的 site
方法中,在 watch
任务中。
如果删除这些,它应该可以工作:
"!_site/*.*", "!_site/**/*.*"
Grunt 似乎不喜欢 !
.
内嵌的下划线
我不确定如何在保留下划线的同时解决此问题,但您始终可以将目录重命名为 site
或 dist
,而不是 _site
。
我在这个问题上花了一个多小时,浏览了几个问题,但找不到答案。
我在 javascript 文件上使用 watch 时遇到了问题。监视所有其他文件并正确执行任务。
如果我 运行 从一开始就使用默认值,concat 和 uglify 工作得很好,但是如果我对 js 文件进行任何更改,watch 将直接忽略它。
这是我的文件:
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
index: {
src: ['js/shared/*.js', 'js/index/*.js'],
dest: 'js/concat/index.js',
},
page: {
src: ['js/shared/*.js', 'js/page/*.js'],
dest: 'js/concat/page.js',
},
},
uglify: {
dist: {
files:{
'js/build/index.min.js': 'js/concat/index.js',
'js/build/page.min.js': 'js/concat/page.js',
}
}
},
sass: {
options: {
outputStyle: 'compressed',
},
dist: {
files: {
'css/main-unprefixed.css': 'sass/main.scss'
}
}
},
autoprefixer: {
global: {
src: 'css/main-unprefixed.css',
dest: 'css/main.css'
}
},
jade: {
compile: {
options: {
pretty: true
},
files: [{
expand: true,
cwd: '',
src: [ '_layouts/jade/*.jade' ],
dest: '_layouts',
flatten: true,
ext: '.html'
}]
}
},
shell: {
jekyllServe: {
command: "jekyll serve --no-watch"
},
jekyllBuild: {
command: "jekyll build"
}
},
open : {
build: {
path: 'http://localhost:4000',
app: 'Firefox'
}
},
watch: {
options: {
livereload: true
},
site: {
files: ["*.html", "**/*.html", "*.md", "**/*.md", "**/*.yml", "*.yml", "!_site/*.*", "!_site/**/*.*"],
tasks: ["shell:jekyllBuild"]
},
scripts: {
files: ["js/*.js", "js/**/*.js"],
tasks: ["concat", "uglify", "shell:jekyllBuild"]
},
jade: {
files: ["_layouts/jade/*.jade"],
tasks: ["jade"]
},
css: {
files: ["sass/*.scss", "sass/**/*.scss", "sass/**/**/*.scss"],
tasks: ["sass", "autoprefixer", "shell:jekyllBuild"]
}
}
});
require('load-grunt-tasks')(grunt);
// Default task(s).
grunt.registerTask("serve", ["shell:jekyllServe"]);
grunt.registerTask("default", ["open", "concat", "uglify", "sass", "autoprefixer", "jade", "shell:jekyllBuild", "watch"]);
};
非常感谢任何帮助。
问题出在您的 site
方法中,在 watch
任务中。
如果删除这些,它应该可以工作:
"!_site/*.*", "!_site/**/*.*"
Grunt 似乎不喜欢 !
.
我不确定如何在保留下划线的同时解决此问题,但您始终可以将目录重命名为 site
或 dist
,而不是 _site
。