Grunt: как запустить отдельные процессы для CSS и JS

Как видите, у меня есть задачи для CSS ['sass:main'] и для JS ['jshint:main', 'concat:main', 'uglify:main'], но я хочу выполнять отдельные задачи для отдельных файлов (JS и CSS) и слушать изменения (смотреть). Может кто-то указать мне правильное направление, я не совсем уверен, что я должен искать. Это то, что часы могут обрабатывать, или есть другой плагин? Я немного новичок, чтобы ворчать, поэтому все еще пытаюсь понять, как его использовать. Спасибо

GruntFile.js:

module.exports = function(grunt) {
    var config = {
        pkg: grunt.file.readJSON('package.json'),
        jshint: {
            options: {
                globals: {
                    jQuery: true,
                    console: true,
                    module: true,
                    document: true
                }
            },  
            main: {
                src: [
                    'assets/templates/main/js/crm/*.js',
                ]
            }
        },
        concat: {
            options: {
                separator: '\n\n'
            },
            main: {
                src: [
                    'assets/templates/main/js/crm/*.js',
                ],
                dest: 'assets/templates/main/js/crm.min.js'
            }
        },
        sass: {
            options: {
                style: 'compressed'
            },
            main: {
                files: {
                    'assets/templates/main/css/main.min.css': 'assets/templates/main/sass/main.scss',
                }
            }
        },
        uglify: {
            options: {
                banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
            },
            main: {
                src: 'assets/templates/main/js/crm.min.js',
                dest: 'assets/templates/main/js/crm.min.js'
            }
        },
        watch: {
            mainjs: {
                files: ['assets/templates/main/js/crm/*.js'],
                tasks: ['jshint:main', 'concat:main', 'uglify:main'],
            },
            mainsass: {
                files: ['assets/templates/main/sass/*.scss''],
                tasks: ['sass:main'],
            }
        },
        concurrent: {
            maincss: ['sass:main'],
            mainjs:  ['jshint:main', 'concat:main', 'uglify:main']
        }
    };

    grunt.initConfig(config);

    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-sass');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-concurrent');

    grunt.registerTask('main', ['jshint:main', 'concat:main', 'uglify:main', 'sass:main']);
    grunt.registerTask('main-watch', ['jshint:main', 'concat:main', 'uglify:main', 'sass:main', 'concurrent:mainsass']);
};

Когда я пытаюсь запустить задачи:

$ grunt main-watch
Loading "Gruntfile.js" tasks...ERROR
SyntaxError: Invalid or unexpected token
Warning: Task "main-watch" not found. Use --force to continue.

Aborted due to warnings.

1 ответ

Похоже, вы хотите выполнить две одновременные задачи просмотра. Вы можете сделать это, используя такую ​​конфигурацию:

    ...

    concurrent: {
        options: { logConcurrentOutput: true },
        watch: ['watch:mainjs', 'watch:mainsass']
    }
};

...

grunt.registerTask('main-watch', ['concurrent:watch']);

Обратите внимание, что logConcurrentOutput по умолчанию false, так что если вы хотите, чтобы вывод был записан на консоль, вам нужно установить его на true,

Другие вопросы по тегам