node.js - vaadin-maven-plugin npm 注册表配置

标签 node.js maven npm vaadin vaadin14

对于上下文,我正在运行一个无法直接访问互联网的 jenkins 构建。我们与 maven、nodejs 和 npm 的代理存储库有联系。

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

显然,这会触发实际的 npm install,所以我需要它来联系私有(private) 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 手动配置 Node 安装,因为它不是静态 Node 安装,因此配置需要在实际的 maven 构建中进行。

最佳答案

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

选项 1 是使用 npm 执行/目标配置 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 构建,因为它会将其保存为默认的 jenkins 用户。因此,这似乎不是一个合适的解决方案。

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

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

关于node.js - vaadin-maven-plugin npm 注册表配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68438157/

相关文章:

javascript - 解压缩文件并上传到 S3

javascript - moment.js - UTC 不能像我预期的那样工作

javascript - `req` 和 `res` 来自哪里?

java - 使用plexus-compiler-eclipse编译时,无法解析import org.omg .CORBA

reactjs - 切换到 npm 进行 create-react-app

node.js - npm 错误! http ://registry. npmjs.org/ansi-escapes 上的无效 json 响应正文原因:JSON 输入意外结束

java - 为什么 Apache 基金会发布两个构建工具(Ant 和 Maven)?

java - 添加到 dependencyManagement 时,SpringBoot 不运行单元测试

node.js - 如果尚未安装,如何全局安装 npm 包?

javascript - npm start 与 Node app.js