web-dev-qa-db-ja.com

Mavenでnode.jsアプリをデプロイする方法は?

チームのほとんどはJava開発者で構成されているため、ビルド/デプロイメント/依存関係管理システム全体がMavenの上に構築されています。すべてのビルドプロセスがユニットテストを実行するようにCIフロントエンド用のphantomJS、およびバックエンド用のjasmine-node)。この目的のためにkarma mavenプラグインを構成することができました。

これにより、ビルド時にpackage.jsonからnode.jsの依存関係をダウンロードする問題は解決しません。 node.js /エクスプレスアプリを既存の環境にデプロイする必要があるため、完璧なシナリオは次のようになります。

  1. リポジトリからプルします(Mavenビルドで自動的に行われます)
  2. npm install(つまり、ノードパッケージレジストリから依存関係をダウンロードする)
  3. 実行中のテスト

私はmaven用のnodejsパッケージを見つけようとしましたが、正直に言って、node.js開発者として、適切なツールを選択することに自信がありません。まともなもの。

たぶん、シェルプラグインを使用して、ターミナルからnpm installを呼び出すほうが良い選択でしょうか?

あなたの意見は何ですか?

45
Rafal Pastuszak

次の2つの選択肢があります。

ハッキーな解決策として、あなた自身で述べたようにまだ可能ですが、maven-antrun-pluginのようなものを使用して、実際にmavenでnpmを実行します。

すべてのアプローチには長所と短所がありますが、frontend-maven-pluginが最も頻繁に使用されるアプローチのようです-ただし、ciサーバーはインターネットの任意のパッケージからダウンロードできると想定していますが、「hacky」ソリューションも動作するはずですciサーバーはインターネットにまったく接続していません(中央のMavenリポジトリのプロキシを除く)

27

Gruntと多くの利用可能なプラグインで答えを見つけることができると思います。

私は実際にAngularJSを使用してクライアント側を作成するWebプロジェクトに取り組んでいます。それにもかかわらず、私は展開プロセスがあなたの質問に部分的に答えるかもしれないと思います:

あなたの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タスク:ノードパッケージから依存関係をダウンロードします。

  • 2番目の部分はbower installタスク:bowerを使用した他の依存関係のダウンロード(私の場合はAngularJSですが、この部分は必要ないかもしれません)

  • 3番目の部分はGrunt Releaseパート:Grunt単体テストを含むKarmaタスクを起動します。

Grunthere に関するドキュメントを見つけることができます。 Karma単体テストなど、使用可能なプラグインは多数あります。

これがお役に立てば幸いです。

15
Pear

AngularJS 2 + Spring Boot application by exec-maven-pluginでnpmプロセスを動作させました。私はお辞儀やうなり声を使いませんが、Pearの上記のantrunの例を見て、exec-maven-pluginでも動作させることができると思います。

以下は、exec-maven-pluginのpom.xmlの例です。私のアプリにはpackage.jsonがあり、すべてのAngularJS .tsファイルはsrc/main/resourcesの下にあるため、パスからnpmを実行します。依存関係についてはnpm installを実行し、.ts変換についてはnpm run tscを実行します.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>

これに関する小さなハックは、WindowsまたはMacでEclipse上でmavenビルドを実行することです。 Linuxを使用するEclipseでも、Windowsコマンドウィンドウでも問題ありません。 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はセキュリティポリシーで保護されているので、リカバリディスクから起動した後に実行しました

10
Steve Park