【问题标题】:Grunt Does Not Watch JS filesGrunt 不看 JS 文件
【发布时间】:2015-03-27 13:12:21
【问题描述】:

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

在我的 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"]);
};

非常感谢任何帮助。

【问题讨论】:

  • 在监视任务中,尝试使用这种模式:files: ['js/{,*/}*.js'] 而不是files: ["js/*.js", "js/**/*.js"] ?
  • @TonyBarnes 试过了,监视任务仍然没有注册任何更改。
  • 只是脚本没有被观看 - HTML 和 CSS 文件是否正常工作?显然,如果没有代码库,这很难调试。我可能会尝试将watch 任务与default 任务分开并从那里进行调试。
  • 只是脚本,其余的都可以正常观看。
  • 尝试从监视任务中删除 'site' 方法,以便首先运行脚本。

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


【解决方案1】:

问题在于您的site 方法,在watch 任务中。

如果你删除这些,它应该可以工作:

"!_site/*.*", "!_site/**/*.*"

Grunt 似乎不喜欢与! 内联的下划线。

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

【讨论】:

  • 重命名后一切正常。非常感谢,从没想过下划线可能是问题所在!
  • @KreaTief 很高兴!很高兴我能帮忙:)
猜你喜欢
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多