Создайте две конфигурации для подключаемого модуля grunt, который не является многозадачным - PullRequest
0 голосов
/ 14 февраля 2019

Я использую пакет grunt с именем grunt-preprocess . Очевидно, он не поддерживает многозадачность.

grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  preprocess: {
    options: {
      context: {
        ENV: grunt.option('env') || 'prod'
      },
    },
    all_from_dir: {
      src: '*.*',
      cwd: 'src/',
      dest: 'src',
      expand: true
    }
  },
})

Теперь я хочу выполнить preprocess дважды, один разиз каталога src и один раз из каталога dist.Как мне настроить этот пакет для достижения этого?

Я пробовал эту конфигурацию;

grunt.initConfig({
  pkg: grunt.file.readJSON('package.json'),
  preprocess: {
    first: {
      options: {
        context: {
          ENV: grunt.option('env') || 'prod'
        },
      },
      all_from_dir: {
        src: '*.*',
        cwd: 'src/',
        dest: 'src',
        expand: true
      }
    },
    second: {
      options: {
        context: {
          ENV: grunt.option('env') || 'prod'
        },
      },
      all_from_dir: {
        src: '*.*',
        cwd: 'dist/',
        dest: 'dist',
        expand: true
      }
    }
  }
})

и затем выполняю grunt preprocess:first.Однако это не работает:

PS D:\workspace\environment-compile> grunt preprocess:first
Running "preprocess:first" (preprocess) task
Done.

1 Ответ

0 голосов
/ 14 февраля 2019

Да, вы правы preprocess является единственной задачей, поэтому не позволяет определять несколько целей .

Вам потребуется создать еще одну пользовательскую задачу, котораядинамически настраивает задачу preprocess и затем запускает ее.

Например:

Gruntfile.js

module.exports = function (grunt) {

  grunt.loadNpmTasks('grunt-preprocess');

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),

    preprocess: {
      options: {
        context: {
          ENV: grunt.option('env') || 'prod'
        },
      },
      all_from_dir: {
        src: '*.*',
        cwd: 'src/',
        dest: 'src',
        expand: true
      }
    },
    // ...
  });

  // Custom task dynamically configures the `preprocess` Task and runs it.
  grunt.registerTask('preprocess_dist', function() {
    grunt.config.set('preprocess.all_from_dir.cwd', 'dist/');
    grunt.config.set('preprocess.all_from_dir.dest', 'dist');
    grunt.task.run(['preprocess']);
  });

  grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);

};

Запуск:

Через CLI выполните следующую единственную команду, чтобы выполнить задачу preprocess дважды, один раз из каталога src, один раз из каталога dist:

grunt preprocessBoth

Объяснение:

  1. Пользовательская задача с именем preprocess_dist динамически конфигурирует значения для свойств cwd и dest, устанавливая их в 'dist/' и 'dist'соответственно.Это делается с помощью метода grunt.config.set
  2. Затем задача запускается с помощью метода grunt.task.run.
  3. Последнийстрока кода, которая гласит:

    grunt.registerTask('preprocessBoth', [ 'preprocess', 'preprocess_dist' ]);
    

    создает задачу с именем preprocessBoth и добавляет следующие две задачи к taskList:

    • preprocess
    • preprocess_dist
  4. По сути, то, что происходит при запуске grunt preprocessBoth:

    • preprocess Задача запускается с использованием файлов из каталога src.
    • Затем пользовательская задача preprocess_dist запускается с использованием файлов из каталога dist.
  5. При желании вы также можете запускать каждую задачу независимо через CLI, а именно:

    grunt preprocess

    и

    grunt preprocess_dist

...