You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Pom.xml执行npm install报错:JSON解析异常与.npmrc配置问题

解决exec-maven-plugin执行npm install时的.npmrc配置问题

咱们先理清楚你遇到的核心问题:那个JSON解析错误Unexpected token < in JSON at position 0,本质是npm请求私有包时拿到了HTML响应(比如Nexus的404页面或者未授权页面),说明它没正确读取到.npmrc里的私有仓库配置,跑去默认公共仓库找私有包,自然失败了。下面分两部分解决你的疑问:

一、如何在pom.xml中指定.npmrc的位置

你可以通过两种方式在exec-maven-plugin里强制指定.npmrc路径:

方法1:通过npm命令行参数指定

直接在插件的arguments里添加--userconfig参数,明确指向你的.npmrc文件路径。修改后的插件配置如下:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.6.0</version>
  <executions>
    <execution>
      <id>npm install my</id>
      <goals>
        <goal>exec</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <executable>npm</executable>
        <workingDirectory>${project.basedir}/../</workingDirectory>
        <arguments>
          <argument>install</argument>
          <!-- 指定.npmrc的路径,这里换成你实际的文件位置 -->
          <argument>--userconfig</argument>
          <argument>${project.basedir}/../.npmrc</argument>
        </arguments>
      </configuration>
    </execution>
  </executions>
</plugin>

方法2:通过环境变量指定

在插件配置里添加environmentVariables,设置NPM_CONFIG_USERCONFIG环境变量,npm会自动读取这个路径的配置文件:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>1.6.0</version>
  <executions>
    <execution>
      <id>npm install my</id>
      <goals>
        <goal>exec</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <executable>npm</executable>
        <workingDirectory>${project.basedir}/../</workingDirectory>
        <environmentVariables>
          <!-- 指定.npmrc路径 -->
          <NPM_CONFIG_USERCONFIG>${project.basedir}/../.npmrc</NPM_CONFIG_USERCONFIG>
        </environmentVariables>
        <arguments>
          <argument>install</argument>
        </arguments>
      </configuration>
    </execution>
  </executions>
</plugin>

二、为什么npm没有自动找到你的.npmrc?

npm查找.npmrc是有固定优先级顺序的,没找到大概率是以下某个原因:

  • 工作目录不匹配:你的插件设置了workingDirectory为${project.basedir}/../,npm会在这个目录及其父目录下找.npmrc。如果你把.npmrc放在了Java项目的根目录(${project.basedir}),那npm的工作目录是上一级,自然扫不到。
  • 文件命名或位置错误:比如文件名写成了npmrc(少了开头的点)、或者带了多余后缀(比如.npmrc.txt),或者文件路径层级不对,npm识别不到。
  • 权限问题:运行mvn命令的用户没有读取该.npmrc文件的权限,导致npm无法加载它。
  • 环境变量干扰:如果系统里已经设置了NPM_CONFIG_USERCONFIG环境变量,指向了一个不存在或无效的文件,npm会优先用这个配置,忽略项目级的.npmrc。

额外排查建议

  • 先手动在${project.basedir}/../目录下执行npm install --userconfig 你的.npmrc路径,验证配置是否能正常拉取私有包。
  • 执行npm config list --l,查看npm实际加载的配置项,确认是否包含了你在.npmrc里设置的私有仓库地址。
  • 检查.npmrc的内容是否正确,私有仓库的配置格式应该类似:
    @test:registry=http://你的Nexus地址/repository/npm-private/
    //你的Nexus地址/repository/npm-private/:_authToken=你的授权令牌
    

内容的提问来源于stack exchange,提问作者user1365697

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:53:49