Как развернуть приложение node.js с maven?
Большая часть нашей команды состоит из разработчиков Java, поэтому вся система управления построением/развертыванием/зависимостью построена поверх maven. Мы используем CI, чтобы каждый процесс сборки выполнял unit test (w. Карма и phantomJS для интерфейса, а жасмин - node для бэкэнд). Для этой цели мне удалось настроить плагин karma maven.
Это не решает проблему загрузки зависимостей node.js из package.json on build. Мне нужно развернуть мое приложение node.js/express в существующей среде, поэтому идеальный сценарий:
- вытащить из репо (выполняется автоматически с помощью сборки maven)
-
npm install
(то есть - загрузка зависимостей из реестра node)
- текущие тесты
Я пытался найти пакет nodejs для maven, но, честно говоря, как разработчик node.js, я не чувствую себя очень уверенно, когда дело доходит до выбора правильных инструментов, поскольку я не могу отличить плохой плагин maven от приличного.
Возможно, использование плагина оболочки и вызов npm install
из терминала - лучший выбор?
Каково ваше мнение?
Ответы
Ответ 1
У вас есть два варианта:
Как хакерское решение, хотя по-прежнему возможно, вы могли бы, как вы уже упоминали, использовать что-то вроде maven-antrun-plugin для выполнения npm с maven.
Все подходы имеют свои плюсы и минусы, но frontend-maven-plugin, по-видимому, является наиболее часто используемым подходом, но он предполагает, что ваш ci-сервер может загружать из интернет-пакетов произвольные пакеты, тогда как "хакерское" решение также должно работать, когда ваш сервер ci вообще не имеет подключения к Интернету (помимо проксирования центрального репозитория maven)
Ответ 2
Я думаю, вы можете найти ответ в Grunt
и множестве доступных плагинов.
Я действительно работаю над веб-проектом, где клиентская сторона создана с помощью AngularJS
. Тем не менее, я думаю, что процесс развертывания может частично ответить на ваш вопрос:
В вашем pom.xml
вы можете сделать что-то вроде этого:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>exec-gen-sources</id>
<phase>generate-sources</phase>
<configuration>
<target name="Build Web">
<exec executable="cmd" dir="${project.basedir}"
failonerror="true" osfamily="windows">
<arg line="/c npm install" />
</exec>
<exec executable="cmd" dir="${project.basedir}"
failonerror="true" osfamily="windows">
<arg line="/c bower install --no-color" />
</exec>
<exec executable="cmd" dir="${project.basedir}"
failonerror="true" osfamily="windows">
<arg line="/c grunt release --no-color --force" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
-
Первая часть - это задача npm install
: загрузка зависимостей из пакета node.
-
Вторая часть - это задача bower install
: загрузка других зависимостей с помощью bower (в моем случае AngularJS
, но вам может не понадобиться эта часть)
-
Третья часть - это часть Grunt Release
: запуск задачи Grunt
, которая включает в себя Karma
модульное тестирование.
Вы можете найти документацию о Grunt
здесь. Существует множество доступных плагинов, таких как Karma
модульное тестирование.
Надеюсь, это помогло вам.
Ответ 3
Я сделал работу по обработке npm для моего приложения AngularJS 2 + Spring exec-maven-plugin. Я не использую беседу и ворчание, но думаю, что вы можете заставить его работать с помощью exec-maven-plugin, посмотрев на пример antrun выше от Pear.
Ниже приведен пример pom.xml для exec-maven-plugin. Мое приложение имеет package.json, и все файлы AngularJS.ts находятся под src/main/resources, поэтому запустите npm из этого пути. Я запускаю npm install для зависимостей и npm запускает tsc для преобразования .ts в .js
pom.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<id>exec-npm-install</id>
<phase>generate-sources</phase>
<configuration>
<workingDirectory>${project.basedir}/src/main/resources</workingDirectory>
<executable>npm</executable>
<arguments>
<argument>install</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
<execution>
<id>exec-npm-run-tsc</id>
<phase>generate-sources</phase>
<configuration>
<workingDirectory>${project.basedir}/src/main/resources</workingDirectory>
<executable>npm</executable>
<arguments>
<argument>run</argument>
<argument>tsc</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
Один маленький взлом на этом работает на maven build на eclipse с Windows или Mac. Это отлично работает на eclipse с linux или даже отлично в окне команд Windows. Когда вы запускаете build на eclipse с Windows, он не понимает npm и жалуется, что не нашел файл. Странно, что npm отлично работает в окне командной строки Windows. Поэтому, разрешая хак, я создаю файл npm.bat по системному пути. В моем случае nodejs и npm установлены в C:\Program File\nodejs. После этого пакетного файла. все работает нормально.
npm.bat
@echo off
set arg1=%1
set arg2=%2
C:\Progra~1\nodejs\npm.cmd %arg1% %arg2%
Для Mac у меня такая же проблема на eclipse. Дело в том, что nodejs и npm установлены в /usr/local/bin. Поэтому, чтобы решить проблему, я делаю символическую ссылку /usr/local/bin/ node и/usr/local/bin/npm под /user/bin. Однако/usr/bin защищен в политике безопасности, я сделал это после загрузки с диска восстановления