【问题标题】:Infinite loop when running grunt-concurrent with 'nodemon' and 'watch' tasks使用“nodemon”和“watch”任务运行 grunt-concurrent 时的无限循环
【发布时间】:2018-06-06 00:04:26
【问题描述】:

我正在尝试使用grunt-concurrent 任务来运行grunt-nodemon 来查看我的js 脚本,并同时使用watchto 仍然concatuglify 我的文件也发生变化。

当我在命令行上运行 grunt 时,我得到以下无限循环:

Running "watch" task
Waiting...
Verifying property watch.concurrent.files exists in config...ERROR >> Unable to process task.
Warning: Required config property "watch.concurrent.files" missing.

阻止这种不断涌现的消息的唯一方法是退出命令行。

这是我的 gruntfile:

module.exports = function(grunt) {
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    concat: {
    dist: {
        src: [
            'public/js/libs/*.js',
        ],
        dest: 'public/js/build/production.js',
        }
    },
    uglify: {
        build: {
            src: 'public/js/build/production.js',
            dest: 'public/js/build/production.min.js'
        }
    },
    css: {
      files: ['css/*.scss'],
      tasks: ['sass'],
      options: {
          spawn: false,
      }
    },
    sass: {
    dist: {
        options: {
            style: 'compressed'
        },
        files: {
            'public/css/build/main.css': 'public/css/main.scss'
        }
      }
    },
    nodemon: {
      dev: {
        script: './start.js'
      }
    },
    watch: {
    scripts: {
        files: ['js/*.js'],
        tasks: ['concat','uglify'],
        options: {
            spawn: false,
        },
    },
    concurrent: {
        target: {
            tasks: ['nodemon', 'watch'],
            options: {
                logConcurrentOutput: true
            }
        }
    },
  }
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-nodemon');
grunt.loadNpmTasks('grunt-concurrent');
grunt.registerTask('default', ['concat','uglify','sass','watch','nodemon','concurrent:target']);
};

这是我的 package.json:

{
  "name": "**** *****",
  "version": "1.0.0",
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-concurrent": "^2.3.1",
    "grunt-contrib-concat": "^1.0.1",
    "grunt-contrib-imagemin": "^1.0.1",
    "grunt-contrib-sass": "^1.0.0",
    "grunt-contrib-uglify": "^2.3.0",
    "grunt-contrib-watch": "^1.0.0",
    "grunt-nodemon": "^0.4.2",
    "webpack-dev-server": "^2.9.7"
  },
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "nodemon ./start.js"
  },
  "author": "**** *******",
  "license": "ISC",
  "dependencies": {
    "cookie-parser": "^1.4.3",
    "dotenv": "^4.0.0",
    "express": "^4.16.2",
    "mongod": "^2.0.0",
    "mongoose": "^4.13.7",
    "nodemon": "^1.14.1",
    "normalize.css": "^6.0.0"
  }
}

编辑:解决了无限循环

我仍然认为我还没有完全解决我的问题,但我离我更近了一步......

我的watchtask 中有语法错误/遗漏:

    watch: {
    scripts: {
        files: ['js/*.js'],
        tasks: ['concat','uglify'],
        options: {
            spawn: false,
        },
    },

应该包含

watch: {
scripts: {
    files: ['js/*.js'],
    tasks: ['concat','uglify'],
    options: {
        spawn: false,
    },
},
css: {
      files: ['css/*.scss'],
      tasks: ['sass'],
      options: {
          spawn: false,
      },
    }
},

这导致我的监视任务无法正常运行。我目前没有无限循环了。相反,我的命令行呈现这个:

Running "concat:dist" (concat) task

Running "uglify:build" (uglify) task
>> 1 file created 797.64 kB → 378.58 kB

Running "sass:dist" (sass) task

Running "nodemon:dev" (nodemon) task
[nodemon] 1.14.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node ./start.js`
Express running → PORT 7777

看起来nodemon 正在运行,但它根本没有说明我的watch 任务,当我更改我的SCSS 文件时,什么也没有发生。我显然希望grunt-concurrent 同时运行我的nodemonwatch 任务。

如果命令行成功执行且没有任何错误,是否应该说一些不同的内容?

谢谢!

【问题讨论】:

    标签: javascript gruntjs grunt-contrib-watch nodemon grunt-concurrent


    【解决方案1】:

    grunt.registerTask 代码中删除nodemonwatch 解决了这个问题:

    grunt.registerTask('default', ['concat','uglify','sass','watch','nodemon','concurrent:target']);

    正在运行 nodemon 并作为默认任务监视,然后尝试运行 concurrent:target,而只是在运行 concurrent:target 时会同时运行 nodemonwatch

    现在终端呈现:

    Running "concat:dist" (concat) task
    
    Running "uglify:build" (uglify) task
    >> 1 file created 797.64 kB → 378.58 kB
    
    Running "sass:dist" (sass) task
    
    Running "concurrent:target" (concurrent) task
        Running "watch" task
        Waiting...
        Running "nodemon:dev" (nodemon) task
        [nodemon] 1.14.1
        [nodemon] to restart at any time, enter `rs`
        [nodemon] watching: *.*
        [nodemon] starting `node ./start.js`
        Express running → PORT 7777
    

    这看起来是正确的!

    经过修正的新 Gruntfile 如下所示:

    module.exports = function(grunt) {
      grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        concat: {
        dist: {
            src: [
                'public/js/libs/*.js',
            ],
            dest: 'public/js/build/production.js',
            }
        },
        uglify: {
            build: {
                src: 'public/js/build/production.js',
                dest: 'public/js/build/production.min.js'
            }
        },
        sass: {
        dist: {
            options: {
                style: 'compressed'
            },
            files: {
                'public/css/build/main.css': 'public/css/main.scss'
            }
          }
        },
        concurrent: {
            target: {
                tasks: ['nodemon', 'watch'],
                options: {
                    logConcurrentOutput: true
                }
            }
        },
        watch: {
        scripts: {
            files: ['./public/js/*.js'],
            tasks: ['concat','uglify'],
            options: {
                spawn: false,
            },
        },
        css: {
              files: ['./public/css/*.scss'],
              tasks: ['sass'],
              options: {
                  spawn: false,
              },
            }
        },
        nodemon: {
          dev: {
            script: './start.js'
          }
        },
    });
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-nodemon');
    grunt.loadNpmTasks('grunt-concurrent');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.registerTask('default', ['concat','uglify','sass','concurrent:target']);
    
    };
    

    【讨论】:

      猜你喜欢
      • 2014-02-24
      • 2014-05-20
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多