javascript - Grunt 不观察 JS 文件

标签 javascript gruntjs grunt-contrib-watch grunt-contrib-concat grunt-contrib-uglify

我在这个问题上花了一个多小时,浏览了几个问题,但找不到答案。

我在 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 似乎不喜欢与 ! 内联的下划线。

我不确定如何在保留下划线的同时解决此问题,但您始终可以将目录重命名为 sitedist,而不是 _site .

关于javascript - Grunt 不观察 JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29301531/

相关文章:

javascript - Gulp 中的 Grunt 风格模板?

javascript - 将 JSHint 与 Express.js/'delete' 一起使用(保留字)

javascript - Grunt 服务器错误,EMFILE

javascript - 纠错后 Grunt watch 运行得更少

javascript - grunt-notify:成功时不触发

javascript - 将新对象添加到多维数组

javascript - JavaScript 警报后页面重新加载/刷新 - 不希望它这样做!

javascript - 这个最大代码有什么作用?

javascript - 通过 jQuery 显示/隐藏 <li>

javascript - 已编译 TypeScript 的输出文件夹