grunt watch task阻止命令行

时间:2013-03-22 18:57:25

标签: node.js command-line cmd watch gruntjs

我是新来的咕噜咕噜,还在学习,所以我遇到了一个非常奇怪的问题。 当我运行"watch"任务时,我的命令行被阻止,所以基本上我不能做任何事情。 请记住,任务已成功完成。 这是我的命令行输出:

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...

如您所见,我所做的只是运行"compass"任务,它已成功完成。

插入点在Waiting...文本部分后继续闪烁,但键盘输入不起作用。

我的咕噜声配置

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');

};

5 个答案:

答案 0 :(得分:21)

我没有使用grunt watch,但是我认为问题在于它是一个持续运行的进程,默认情况下,命令行通常会一次运行一个进程。您可以使用3种解决方案。

  1. 打开一个新终端。您可以同时打开多个,这样您就可以使用第二个作为主终端,而grunt watch占用另一个。
  2. 使用&在你的命令中的符号。这将开始该过程并立即将命令行返回给您,允许您将其用于其他事情。您可以将其视为在后台运行命令。该过程仍然连接到终端窗口,因此如果您关闭窗口,该过程将结束。

      

    grunt w&

  3. 在命令周围使用(&)。这将在后台运行,与&相同,但关闭终端窗口时不会终止进程。

      

    (grunt w&)

答案 1 :(得分:5)

对于Windows使用

start grunt

这将带来一个CMD窗口,该窗口将在后台“观察”并离开你正在工作的git-bash或cmd窗口,就像你离开它一样。

换句话说,这将为您在单独的cmd窗口中运行任务。

只是想让人们知道这对评论有用。

答案 2 :(得分:5)

我发现通过同时按下Ctrl和c来停止监视过程会更简单。 然后我可以使用命令行然后做什么然后当我准备好回到浏览器时再次运行grunt watch。

答案 3 :(得分:1)

除了@Nick提出的终端解决方案之外,最好有更好的集成节点解决方案。

这是来自grunt-contib-watch https://github.com/gruntjs/grunt-contrib-watch/issues/340和grung-bg-shell https://github.com/rma4ok/grunt-bg-shell/issues/14的WONTFIX。

建议的替代方案是:

答案 4 :(得分:0)

我使用屏幕https://www.gnu.org/software/screen/,所以我可以在终端窗口之间切换。