Подтвердить что ты не робот

Как развернуть приложение 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 из терминала - лучший выбор?

Каково ваше мнение?

4b9b3361

Ответ 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 защищен в политике безопасности, я сделал это после загрузки с диска восстановления