Я недавно обнаружил эти v0.4.0
совместимые с Grunt задачи:
Грунт-предобработка
Задача Grunt вокруг модуля предварительной обработки npm.
Грунт-окр
Задача Grunt для автоматизации настройки среды для будущих задач.
Ниже приведены отрывки из моего Gruntfile.js
.
Настройка ENV:
env : {
options : {
/* Shared Options Hash */
//globalOption : 'foo'
},
dev: {
NODE_ENV : 'DEVELOPMENT'
},
prod : {
NODE_ENV : 'PRODUCTION'
}
},
Preprocess:
preprocess : {
dev : {
src : './src/tmpl/index.html',
dest : './dev/index.html'
},
prod : {
src : './src/tmpl/index.html',
dest : '../<%= pkg.version %>/<%= now %>/<%= ver %>/index.html',
options : {
context : {
name : '<%= pkg.name %>',
version : '<%= pkg.version %>',
now : '<%= now %>',
ver : '<%= ver %>'
}
}
}
}
Задачи:
grunt.registerTask('default', ['jshint']);
grunt.registerTask('dev', ['jshint', 'env:dev', 'clean:dev', 'preprocess:dev']);
grunt.registerTask('prod', ['jshint', 'env:prod', 'clean:prod', 'uglify:prod', 'cssmin:prod', 'copy:prod', 'preprocess:prod']);
И в /src/tmpl/index.html
файле шаблона (например):
<!-- @if NODE_ENV == 'DEVELOPMENT' -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="../src/js/foo1.js"></script>
<script src="../src/js/foo2.js"></script>
<script src="../src/js/jquery.blah.js"></script>
<script src="../src/js/jquery.billy.js"></script>
<script src="../src/js/jquery.jenkins.js"></script>
<!-- @endif -->
<!-- @if NODE_ENV == 'PRODUCTION' -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="http://cdn.foo.com/<!-- @echo name -->/<!-- @echo version -->/<!-- @echo now -->/<!-- @echo ver -->/js/<!-- @echo name -->.min.js"></script>
<!-- @endif -->
Я уверен, что мои настройки отличаются от большинства людей, и полезность выше будет зависеть от вашей ситуации. Для меня, хотя это потрясающий кусок кода, Yeoman grunt-usemin является более надежным, чем мне лично нужно.
ПРИМЕЧАНИЕ. Я только что обнаружил перечисленные выше задачи сегодня, поэтому я могу пропустить функцию и / или мой процесс может измениться в будущем. На данный момент я люблю простоту и возможности, которые могут предложить grunt-preprocess и grunt-env . :)
Январь 2014 обновление:
По мотивам отрицательного голоса ...
Когда я опубликовал этот ответ, у Grunt было не так много вариантов, 0.4.x
которые предлагали бы решение, которое бы работало для моих нужд. Теперь, спустя месяцы, я бы предположил, что есть больше вариантов, которые могли бы быть лучше, чем я разместил здесь. Хотя я все еще лично использую эту технику для своих сборок и получаю от нее удовольствие , я прошу будущих читателей найти время, чтобы прочитать другие ответы и изучить все варианты. Если вы найдете лучшее решение, пожалуйста, оставьте свой ответ здесь.
Обновление за февраль 2014 года:
Я не уверен, поможет ли это кому-либо, но я создал этот демо-репозиторий на GitHub, который показывает полную (и более сложную настройку) с использованием техники, которую я описал выше.