grunt watch task block the command line

五迷三道 提交于 2019-12-20 18:31:03

问题


I'm new to grunt, still learning, so I came up to a very strange problem. When I run "watch" task, my command line becomes blocked, so basically I cant do anything on it. Bare in mind that the task is completed with success. This is my command line output:

C:\server\css-test>grunt w
Running "watch" task
Waiting...OK
>> File "compass-examples-master\02\sass\screen.scss" changed.

Running "compass" (compass) task
unchanged compass-examples-master/02/sass/ie.scss
unchanged compass-examples-master/02/sass/print.scss
overwrite compass-examples-master/02/stylesheets/new/sass/screen.css

Running "watch" task

Completed in 1.496s at Fri Mar 22 2013 19:31:37 GMT+0100 (Central Europe Standard Time) - Waiting...

As you can see, all I do is run "compass" task, it completes successfully.

Insertion point keeps blinking on after the Waiting... text part, but keyboard input doesn't work.

My grunt configuration

module.exports = function (grunt)
{

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        compass: {
            dist: {
                options: {
                    sassDir: 'compass-examples-master/02',
                    cssDir: 'compass-examples-master/02/stylesheets/new',
                    imagesDir: 'compas-examples-master/02/images',
                    boring: false,
                    outputStyle: 'nested',
                    require: 'sass-media_query_combiner'
                }
            }
        },
        watch: {
            files: 'compass-examples-master/02/sass/*',
            tasks: ['c']
        }
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-compass');


    grunt.registerTask('c', 'compass');
    grunt.registerTask('w', 'watch');

};

回答1:


I havn't used grunt watch, however I believe the problem is that it is a continuously running process, and by default your command line will typically run one process at a time. There are 3 solutions you can use.

  1. Open a new terminal. You can have multiple open at once, and this will allow you to use the second as your main terminal while grunt watch occupies the other.
  2. Use the & symbol in your command. This will begin the process and immediately return the command line to you, allowing you to use it for other things. You can think of it as running the command in the background. The process is still connected to the terminal window, so if you close the window, the process will end.

    grunt w &

  3. Use ( &) around your command. This will run in the background the same as just &, however the process will not be killed when you close the terminal window.

    (grunt w &)




回答2:


For Windows use

start grunt

This will bring a CMD window that will "watch" in the background and leave the git-bash or cmd window you were working in the same as you left it.

In other words, this will run the task in a separate cmd window for you.

Just wanted to let people know this worked per the comments.




回答3:


I find it simpler to just stop the watch process by pressing Ctrl and c at the same time. Then I can use the command line then to do stuff then run grunt watch again when Im ready to go back to the browser.




回答4:


Besides terminal only solutions proposed by @Nick, it would good to have better integrated Node solutions.

This had a WONTFIX from grunt-contib-watch https://github.com/gruntjs/grunt-contrib-watch/issues/340 and grung-bg-shell https://github.com/rma4ok/grunt-bg-shell/issues/14.

Suggested alternatives were:

  • https://www.npmjs.org/package/grunt-forever
  • https://www.npmjs.org/package/grunt-nodemon



回答5:


I use screen, https://www.gnu.org/software/screen/, so I can switch between terminal windows.



来源:https://stackoverflow.com/questions/15577905/grunt-watch-task-block-the-command-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!