Grunt / Yeoman Несколько файлов Gruntfile.js

Моя цель - собрать свой проект в двух отдельных папках сборки, каждая со своими собственными задачами Grunt.

Я заметил, что у grunt-cli есть опция --gruntfile, которая позволяет вам указать другой Gruntfile для использования. Пока у меня Gruntfile.js работает отлично (рядом сток от Йомана). Кроме того, рядом со мной сидит еще один Gruntfile2.js.

Gruntfile.js

var yeomanConfig = {
    app: 'app',
    dist: '../www_browser'
};

Gruntfile2.js

var yeomanConfig = {
    app: 'app',
    dist: '../www'
};

grunt build предназначен для запуска Gruntfile.js, и делает это отлично.

grunt build --gruntfile Gruntfile2.js предназначен для запуска Gruntfile2.js, и делает это с некоторыми сбоями. (предполагается, что сборка осуществляется в ../www папку НЕ ../www_browser папку)

Директива --gruntfile создает соответствующую папку почти для каждой задачи, кроме grunt-usemin и gunt-contrib-htmlmin. Я знаю это из-за этого вывода на консоль здесь:

Running "usemin:css" (usemin) task
Processing as CSS - ../www_browser/styles/22f60055.main.css

Running "concurrent:dist" (concurrent) task

Running "htmlmin:dist" (htmlmin) task
File ../www_browser/404.html created.
File ../www_browser/index.html created.

Вы заметите ../www_browser здесь, в выводе консоли. Все остальные задачи выполняются в ожидаемой папке ../www.

Это кеш-память usemin? Ворчание кеша штука? Или некоторые задачи просто запускаются из Gruntfile.js по умолчанию независимо от директивы --gruntfile Gruntfile2.js?

На данный момент я отказался от попыток выполнить несколько целей из одного файла Grunt. В Yeoman Gruntfile.js слишком много зависимостей, которые еще не поддерживают несколько целей сборки, и я потратил 12 часов безрезультатно на этот подход.

Информация о версии

$: grunt --version
grunt-cli v0.1.9
grunt v0.4.1

$: npm --version
1.2.25

$: yo --version
1.0.3

package.json

{
  "name": "myapp",
  "version": "0.0.0",
  "dependencies": {},
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-copy": "~0.4.1",
    "grunt-contrib-concat": "~0.1.3",
    "grunt-contrib-coffee": "~0.6.5",
    "grunt-contrib-uglify": "~0.2.0",
    "grunt-contrib-compass": "~0.2.0",
    "grunt-contrib-jshint": "~0.4.1",
    "grunt-contrib-cssmin": "~0.6.0",
    "grunt-contrib-connect": "~0.2.0",
    "grunt-contrib-clean": "~0.4.0",
    "grunt-contrib-htmlmin": "~0.1.3",
    "grunt-bower-requirejs": "~0.4.1",
    "grunt-contrib-requirejs": "~0.4.0",
    "grunt-contrib-imagemin": "~0.1.3",
    "grunt-contrib-watch": "~0.4.0",
    "grunt-rev": "~0.1.0",
    "grunt-usemin": "~0.1.10",
    "grunt-mocha": "~0.3.0",
    "grunt-open": "~0.2.0",
    "grunt-svgmin": "~0.1.0",
    "grunt-concurrent": "~0.1.0",
    "matchdep": "~0.1.1",
    "connect-livereload": "~0.2.0"
  },
  "engines": {
    "node": ">=0.8.0"
  }
}

person Jarrod    schedule 27.08.2013    source источник
comment
Он не должен читать Gruntfile по умолчанию. Пробовали ли вы в качестве эксперимента удалить или переименовать Gruntfile.js по умолчанию во что-то случайное перед запуском grunt build --gruntfile Gruntfile2.js?   -  person badsyntax    schedule 27.08.2013
comment
Хорошее предложение. Этот приведет меня к очередной кроличьей норе. Теперь появляется ошибка для задачи concurrent: dist. Предупреждение: не удалось найти допустимый файл Gruntfile. Дополнительную информацию о настройке grunt см. В руководстве по началу работы: gruntjs.com/getting-started Неустранимая ошибка: невозможно найти файл Gruntfile.   -  person Jarrod    schedule 27.08.2013
comment
Это описано здесь: github.com/gruntjs/grunt-cli/issues/26 Хотя после возврата к grunt-cli v0.1.8 я получаю ту же ошибку.   -  person Jarrod    schedule 27.08.2013
comment
ОБНОВЛЕНИЕ: похоже, это проблема с одновременной задачей grunt. См. github.com/sindresorhus/grunt-concurrent/issues/17 для дальнейшая переписка. Как только я решу эту проблему, я вернусь за решением.   -  person Jarrod    schedule 27.08.2013
comment
Похоже, вы добиваетесь прогресса, хотя я сомневаюсь, что проблема связана с параллельной задачей, поскольку я только что попробовал это сам, и он работает, как ожидалось, с пользовательским файлом Gruntfile. Можете ли вы опубликовать свой файл package.json?   -  person badsyntax    schedule 27.08.2013
comment
Конечно, см. Отредактировать вопрос. Кроме того, вы видели всю проблему, которую я подал на GitHub? В частности, часть, где я говорю, BTW, когда я удаляю concurrent: dist из задачи сборки и заменяю ее задачами, которые должны выполняться одновременно, она работает, как ожидалось.   -  person Jarrod    schedule 27.08.2013
comment
Я добавил свой ответ в ветку.   -  person badsyntax    schedule 28.08.2013


Ответы (1)


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

См. Здесь: https://github.com/sindresorhus/grunt-concurrent/blob/v0.1.0/tasks/concurrent.js#L11

В текущей версии плагина флаги передаются, см. Здесь: https://github.com/sindresorhus/grunt-concurrent/blob/v0.3.1/tasks/concurrent.js#L22

Итак, я предлагаю обновить вашу версию grunt-concurrent:

npm install grunt-concurrent@latest --save-dev

person badsyntax    schedule 27.08.2013