Grunt часы для запуска различных задач в разных средах

После того, как GruntJS сгенерирует мой CSS+JS, я хочу, чтобы он скопировал сгенерированные файлы в соответствующие места на серверах, и поэтому я установил для этого разные задачи grunt-copy. Пути для копирования различны для сред разработки и производства:

        devjs: {
            src: paths.dest + '/assets/prod.min.js',
            dest: '/srv/www/dev/js/prod.min.js'
        },
        prodjs: {
            src: paths.dest + '/assets/prod.min.js',
            dest: '/srv/www/htdocs/js/prod.min.js'
        },

Как я могу получить grunt watch знать, в какой среде он находится, и запускать соответствующие задачи grunt-copy для этой среды? Нужно ли мне иметь файл конфигурации, который не отслеживается в git-репо, или что-то, что определяет среду, или есть лучший способ сделать это?

В настоящее время мой grunt-contrib-watch.js имеет следующее, хотя я хотел бы, чтобы он запускал только копирование: devjs ИЛИ copy: prodjs в зависимости от среды.

        js: {
            files: [
                paths.assets + '/**/*.js',
            ],
            tasks: ['js', 'copy:devjs', 'copy:prodjs']
        },

Есть идеи? Спасибо!

2 ответа

Решение

Я решил использовать параметры командной строки для этого. Так что я бы использовал, например, grunt watch --enviro=prod в командной строке (и cron), а затем запишите это в grunt-contrib-watch.js:

module.exports = function(grunt) {

    var paths = grunt.config.get('paths');

    if ( grunt.option( "enviro" ) === 'prod' ) {
        var jsprocess = ['js', 'copy:prodjs'];
    } else if ( grunt.option( "enviro" ) === 'dev' ) {
        var jsprocess = ['js', 'copy:devjs'];
    } else {
        var jsprocess = ['js'];
    }

    grunt.config.set(
        'watch',
        {
            options: {
                expand: true
            },
            css: {
                files: [
                    paths.assets + '/**/*.*ss',
                ],
                tasks: cssprocess
            },...

Как я могу получить ворчливые часы, чтобы узнать, в какой среде они находятся?

Лучшей практикой является определение NODE_ENV переменная среды, чтобы различать среды. Затем вы могли бы использовать некоторые предложения, используя process.env.NODE_ENV регистрировать разные задачи.
После этого вы сможете запускать одно и то же имя задачи с разными конфигами.
Например:

if(process.env.NODE_ENV === 'prod')
    grunt.registerTask('mytask', ['watch:prodjs']);
else
    grunt.registerTask('mytask', ['watch:devjs']);

Другой подход (и, на мой взгляд, лучше) - это просто регистрировать разные задачи для каждой среды.
Этот способ более явный и, следовательно, более безопасный.

grunt.registerTask('prod-task', ['watch:prodjs', 'some-other:prodtask']);
grunt.registerTask('dev-task', ['watch:devjs', 'some-other:devtask']);

Затем вы можете просто запустить любую задачу, которая вам нужна для вашей среды.

grunt prod-task
Другие вопросы по тегам