vaadin-maven-plugin npm 注册表配置

vaadin-maven-plugin npm registry configuration

就上下文而言,我是 运行 无法直接访问互联网的 jenkins 版本。我们有一个与 maven、nodejs 和 npm 的代理存储库的联系。

我正在使用推荐的 frontend-maven-plugin 下载并安装 node 和 npm。这一步工作正常。之后 vaadin-maven-pluginprepare-frontendbuild-frontend 目标一起使用。

显然,这会触发实际的 npm install,所以我需要它来联系私人 npm 注册表,但我找不到任何设置来指定它。我确实在 vaadin-maven-plugin 配置中找到了一个 npmRegistryURL 变量,但显然这没有用于 build-frontend 目标。

我的 pom 设置如下所示:

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.eirslett</groupId>
                <artifactId>frontend-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>install node and npm</id>
                        <goals>
                            <goal>install-node-and-npm</goal>
                        </goals>
                        <phase>generate-resources</phase>
                    </execution>
                </executions>
                <configuration>
                    <nodeVersion>v12.13.0</nodeVersion>
                    <nodeDownloadRoot>https://nexusrepo.com/repository/nodejs/</nodeDownloadRoot>
                    <npmDownloadRoot>https://nexusrepo.com/repository/npmjs/</npmDownloadRoot>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>prep</id>
                        <goals>
                            <goal>prepare-frontend</goal>
                            <goal>build-frontend</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <npmRegistryURL>https://nexusrepo.com/repository/npmjs/</npmRegistryURL>
                </configuration>
            </plugin>
        </plugins>
    </build>

我也尝试让 frontend-maven-plugin 处理 npm install 但这不起作用,因为 vaadin-maven-plugin 是手动的在 node_modules/@vaadin 文件夹中添加额外内容。 所以我得到了与 Vaadin issue 10306

中指定的相同的 Error: Cannot find module '@vaadin/stats-plugin'

我还尝试将 .npmrc 文件添加到我的项目的根目录以指定 npm 注册表,但这没有效果。这应该有效还是根本没有被 vaadin-maven-plugin 检查?

如果能提供一些帮助,我们将不胜感激。我无法使用 npm config set registry 手动配置节点安装,因为它不是静态节点安装,因此配置需要在实际的 maven 构建中进行。

经过大量的搜索和测试,似乎有两种方法可以解决这个问题。

选项 1 是使用 npm execution/goal 配置 frontend-maven-plugin
默认参数是 install,但不一定是。这样你就可以使用这个执行来 运行 npm config set registry 命令。

    <execution>
        <id>npm config</id>
        <goals>
            <goal>npm</goal>
        </goals>
        <configuration>
            <arguments>config set registry https://nexusrepo.com/repository/npmjs/</arguments>
        </configuration>
        <phase>generate-resources</phase>
    </execution>

警告:根据我的经验,这会将给定的注册表保存在用户文件夹 .npmrc 文件中,这可能会影响 jenkins 上的每个 npm 构建,因为它将为默认的詹金斯用户保存它。因此,这似乎不是一个合适的解决方案。

选项 2 是将 .npmrc 文件添加到项目的根目录。
我一开始尝试这样做,但没有成功(如问题中所述)。这似乎只出现在我的本地工作站上,可能是因为我实际上还安装了 nodejs 和 npm,并且设置在其他地方被覆盖了。在詹金斯构建期间,这按预期工作。

选项 2 显然是更好的前进方式,所以这就是我现在所做的。仍然对缺少 vaadin-maven-plugin 文档感到恼火,但至少我让它工作了。