Есть ли хорошие учебники по интеграции grunt с ant? Наша текущая сборка использует ant, потому что мы являемся магазином Java. Тем не менее, front-end начинает становиться гражданином первого класса, и мы изучаем с помощью node и хрюкаем для сборки front-end. Мне нужно интегрировать сборку front-end с помощью сборки ant. Мне нужно знать, как нормализовать коды выхода для всех моих пользовательских задач, а также встроенные задачи grunt и ограничить вывод консоли этими предопределенными кодами, когда вызовы grunt вызывают ant. Любая помощь будет принята с благодарностью.
Интеграция grunt с ant
Ответ 1
Вы можете использовать этот макрос:
<macrodef name="exec-node">
<attribute name="module" description="The name of the NodeJS module to execute"/>
<attribute name="failonerror" default="true" description="Fail if the exit code is not 0"/>
<element name="args" implicit="yes" description="Argument to pass to the exec task"/>
<sequential>
<exec executable="cmd.exe" failonerror="@{failonerror}" osfamily="winnt">
<arg line="/c @{module}" />
<args/>
<!-- Windows cmd output workaround: http://stackoverflow.com/a/10359327/227349 -->
<!-- Forces node stderror and stdout to a temporary file -->
<arg line=" > _tempfile.out 2<&1"/>
<!-- If command exits with an error, then output the temporary file -->
<!-- to stdout delete the temporary file and finally exit with error level 1 -->
<!-- so that the apply task can catch the error if @failonerror="true" -->
<arg line=" || (type _tempfile.out & del _tempfile.out & exit /b 1)"/>
<!-- Otherwise, just type the temporary file and delete it-->
<arg line=" & type _tempfile.out & del _tempfile.out &"/>
</exec>
<exec executable="@{module}" failonerror="@{failonerror}" osfamily="unix">
<args/>
</exec>
</sequential>
</macrodef>
И вы можете вызвать любую команду: example:
<target name="jshint">
<exec-node module="grunt">
<arg value="jshint" />
</exec-node>
</target>
работает как шарм: также обеспечивает печать stderr, что является обычной проблемой при вызове grunt.
Ответ 2
Grunt может вызывать командную строку, поэтому вы можете легко создать несколько задач в grunt, которые ничего не делают, кроме выполнения задачи ant через оболочку.
Библиотека grunt-shell
позволяет особенно легко выполнять внешние команды из задачи grunt: https://github.com/sindresorhus/grunt-shell
Так как вы говорите о пользовательских кодах выхода, вам, вероятно, придется написать свою собственную задачу командной строки, которая выполняет команду оболочки, а затем просматривает код ответа (возможно, с помощью помощника grunt.helpers.spawn
),: https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn
Мой совет? Моя организация недавно прошла то же самое, и лучше всего просто сделать чистый перерыв с ant и полностью избавиться от нее Проекты, связанные с JavaScript.
У Grunt есть такая растущая и полезная библиотека плагинов, я был бы удивлен, если бы вы не смогли дублировать ваши файлы сборки ant и создать 100% -ное решение для javascript.
Ответ 3
вы можете использовать http://abc.tools.qafoo.com/, который включает модуль npm * 1)
Единственное, что вам тогда нужно, это настраиваемый объект, например:
…
<target
name="-mm:compile:main~hooked"
extensionOf="-compile:main~hook"
depends="
-my-compile-npm-hook
"
>
<target
name="-my-compile-npm-hook"
>
<echo>install local grunt-cli</echo>
<antcall target="npm:install">
<param name="in.npm.package.name" value="grunt-cli" />
</antcall>
</target>
…
после этого вы можете запустить grunt в псевдониме каталога .npm/node_modules/.bin/
${npm.local.modulesdir}/.bin/
^^ не пропустите, чтобы включить или определить свойства из src/main/resources/extensions/npm/npm.properties
* 1): неудачно багги с текущей версией node.js