2013-06-14 14 views
30

Większość naszego zespołu składa się z programistów Java i dlatego cały system zarządzania budowaniem/wdrażaniem/zależnościami jest zbudowany na bazie maven. Używamy CI, więc każdy proces budowania uruchamia test jednostkowy (np. Karma i phantomJS dla frontendu oraz jaśmin-węzeł dla backendu). Udało mi się skonfigurować wtyczkę karma maven w tym celu.Jak wdrożyć aplikację node.js z mavenem?

To nie rozwiązuje problemu pobierania zależności node.js z pakietu package.json na kompilacji. muszę wdrożyć moje node.js/Ekspres aplikację w istniejącym środowisku, więc idealnym scenariuszem byłoby:

  1. wyciągnąć z repo (odbywa się automatycznie z maven kompilacji)
  2. npm install (czyli - pobieranie współzależności z pakietu węzła rejestru)
  3. testy jezdne

starałem się znaleźć nodejs pakiet dla Maven, ale szczerze mówiąc - jako node.js deweloper nie czuję się bardzo pewnie, jeśli chodzi o wybór odpowiednie narzędzia, ponieważ nie jestem potrafić odróżnić zły plugin od przyzwoitego.

Być może użycie wtyczki powłoki i wywołanie npm install z terminala jest lepszym wyborem?

Jaka jest Twoja opinia?

Odpowiedz

13

Myślę, że można znaleźć odpowiedź w Grunt i wiele dostępnych wtyczek.

Aktualnie pracuję nad projektem sieciowym, w którym strona klienta jest wykonana z AngularJS. Niemniej jednak, myślę, że proces deployement może częściowo odpowiedzieć na pytanie:

W swojej pom.xml można zrobić coś takiego:

<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> 
  • Pierwsza część to zadanie npm install: pobieranie zależności od pakiet węzłów.

  • Druga część jest zadaniem bower install: downoading innych zależnościach z altana (w moim przypadku, AngularJS, ale może nie być konieczne w tej części)

  • Trzecia część jest Grunt Release część: uruchomienie Grunt zadanie obejmuje testowanie jednostkowe Karma.

Możesz znaleźć dokumentację na temat Grunthere. Istnieje wiele dostępnych wtyczek, takich jak testowanie jednostkowe Karma.

Mam nadzieję, że to pomogło.

+1

Witam, dziękuję za odpowiedź. W rzeczywistości używam dość grubej konfiguracji (około 300 linii kodu). To, co chciałem wiedzieć, to czy używanie maven exec wraz z chrząkaniem jest dobrą praktyką, jeśli chodzi o maven. –

+0

Czy możesz umieścić plik pom.xml również w bloku ''? –

+1

Cóż, szczerze mówiąc nie wiem, czy to dobra praktyka, ale to właśnie robię^^. Pom.xml jest bardziej podobny do tego: \t org.apache.maven.Wtyczki \t Maven-antrun-plugin \t 1,5 \t \t \t \t \t \t Pear

21

Masz dwie możliwości:

Jako hacky rozwiązanie, choć nadal możliwe mógłbyś jak już wspomniałeś, użyj czegoś podobnego do pluginu maven-antrun, aby faktycznie wykonać npm z mavenem.

Wszystkie podejścia mają swoje wady i zalety, ale najczęściej stosowanym podejściem wydaje się być frontend-maven-plugin - ale zakłada, że ​​twój serwer ci może pobierać z internetu dowolne pakiety, podczas gdy "hacky" rozwiązanie powinno również praca, gdy serwer CI nie ma połączenia z internetem na wszystkich (oprócz buforowania centralny repo maven)

+4

Nie ma potrzeby używania anta tutaj, maven-exec-plugin wystarczy, aby uruchomić npm. – user2189998

+0

Tak, maven-exec-plugin jest w porządku, dopóki nie spróbujesz wdrożyć aplikacji na serwerze PaaS takim jak Openshift. Będąc aplikacją Java maven, zwykle używasz obrazu jdk serwera aplikacji, a te obrazy nie są dostarczane z plikiem node.js, więc nie jest dostępne żadne polecenie npm. –

5

zrobiłem pracę procesu npm dla moich angularjs 2 + Wiosna Boot stosowanie przez exec-maven-plugin. Nie używam altan i chrząknięć, ale myślę, że możesz to również zrobić przy użyciu exec-maven-plugin, po spojrzeniu na powyższy przykład Antrun z Pear.

Poniżej znajduje się mój przykład pom.xml dla exec-maven-plugin. Moja aplikacja ma package.json, a wszystkie pliki .ts. AngularJS znajdują się w katalogu src/main/resources, więc uruchom npm ze ścieżki. Biegnę npm zainstalować o zależnościach i npm bieg TSC do konwersji .TS do 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> 

Jeden mały kilof na ten działa Maven budować na zaćmienie z Windows lub Mac. Idealnie sprawdza się w przypadku zaćmienia z linuxem, a nawet dobrze w oknie poleceń systemu Windows. Po uruchomieniu kompilacji w środowisku Eclipse z systemem Windows nie można zrozumieć npm i narzekać, że plik ten nie został znaleziony. Dziwna rzecz to npm działa poprawnie w oknie poleceń Windows. Rozwiązując ten problem, tworzę plik npm.bat w ścieżce systemowej. W moim przypadku nodejs i npm są instalowane w C: \ Program Files \ nodejs. Po włożeniu tego pliku wsadowego. wszystko dziala.

npm.bat

@echo off 
set arg1=%1 
set arg2=%2 
C:\Progra~1\nodejs\npm.cmd %arg1% %arg2% 

dla Mac, mam ten sam problem na Eclipse. Chodzi o to, że nodejs i npm są zainstalowane pod/usr/local/bin. Aby rozwiązać ten problem, tworzę link symboliczny/usr/local/bin/node i/usr/local/bin/npm do under/user/bin. Jednak/usr/bin jest chroniony w polityce bezpieczeństwa, zrobiłem to po uruchomieniu z dysku odzyskiwania

Powiązane problemy