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

离线RHEL 8.6系统创建Svelte项目/安装Node.js包遇FETCH_ERROR

问题分析

出现Unexpected token <错误,本质是Nginx返回了HTML页面(比如404或默认索引页),而非npm仓库要求的JSON元数据。npm仓库不是简单放置tgz包即可,必须符合特定的目录结构和元数据规范。

解决步骤

1. 构建符合npm规范的离线仓库结构

不要手动复制tgz包,需按npm仓库要求创建目录和元数据文件:

  • 针对单个包(比如create-svelte@4.2.1):
    1. 创建目录nodejs/create-svelte/4.2.1/,将下载好的create-svelte-4.2.1.tgz放入其中;
    2. 在create-svelte/目录下创建index.json,内容示例:
    {
      "name": "create-svelte",
      "versions": {
        "4.2.1": "http://myrepo.../nodejs/create-svelte/4.2.1/create-svelte-4.2.1.tgz"
      },
      "dist-tags": {
        "latest": "4.2.1"
      }
    }
    
  • 针对Scope包(比如@smui/button):
    需创建nodejs/@smui/button/目录,后续版本目录和index.json的创建逻辑同上,注意目录名保留@smui前缀。

2. 配置Nginx返回正确的内容类型

修改Nginx配置,确保请求仓库路径时返回JSON而非HTML:

location /nodejs {
    root /path/to/your/repo/filesystem;
    autoindex off;
    default_type application/json;
    # 为tgz包设置正确的MIME类型
    location ~* \.tgz$ {
        default_type application/gzip;
    }
}

配置后重启Nginx,用curl http://myrepo.../nodejs/create-svelte/测试,确认返回的是JSON内容而非HTML。

3. 批量生成仓库结构(可选)

若需要处理大量包,可在联网机器上用脚本批量生成:

#!/bin/bash
REPO_DIR="/path/to/local/repo/nodejs"
# 替换为你需要的包列表
PACKAGES=("create-svelte@latest" "@smui/button@latest")
REPO_URL="http://myrepo.../nodejs"

for pkg in "${PACKAGES[@]}"; do
    PKG_NAME=$(echo $pkg | cut -d'@' -f1)
    PKG_VERSION=$(echo $pkg | cut -d'@' -f2)
    if [ "$PKG_VERSION" = "latest" ]; then
        PKG_VERSION=$(npm view $pkg version)
    fi
    # 创建版本目录
    PKG_DIR="$REPO_DIR/$PKG_NAME/$PKG_VERSION"
    mkdir -p "$PKG_DIR"
    # 下载tar包
    TARBALL_URL=$(npm view $pkg@$PKG_VERSION dist.tarball)
    curl -o "$PKG_DIR/$(basename $TARBALL_URL)" "$TARBALL_URL"
    # 生成包的index.json
    cat > "$REPO_DIR/$PKG_NAME/index.json" <<EOF
{
  "name": "$PKG_NAME",
  "versions": {
    "$PKG_VERSION": "$REPO_URL/$PKG_NAME/$PKG_VERSION/$(basename $TARBALL_URL)"
  },
  "dist-tags": {
    "latest": "$PKG_VERSION"
  }
}
EOF
done

执行脚本后,将生成的nodejs目录同步到离线环境的Nginx文件系统中。

4. 重新执行npm命令

确认仓库结构和Nginx配置正确后,重新运行:

npm create svelte@latest test_project --registry http://myrepo.../nodejs
npm install --save-dev @smui/button --registry http://myrepo.../nodejs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:31