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

Vite项目导入@tensorflow/tfjs-node出现依赖解析错误如何解决

问题根因

你导入了错误的TensorFlow.js发行包。
@tensorflow/tfjs-node是仅支持Node.js运行时的后端版本,依赖C++编译的原生TensorFlow二进制、Node专属原生模块,完全不兼容浏览器环境。你看到报错里的@mapbox/node-pre-gyp就是这个包用来拉取预编译原生二进制的依赖,属于服务端专属代码。
Vite是面向浏览器的前端构建工具,预构建依赖时会尝试把所有导入的模块打包成浏览器可运行的代码,碰到这些Node专属模块时,自然无法处理模块里仅在Node环境下生效的动态引入逻辑,最终抛出依赖找不到的错误。
你之前能直接跑通test.mjs,是因为执行环境是Node,本身就支持这些原生模块和动态引入逻辑,和浏览器端的运行、构建逻辑完全不通用。

解决方案

根据你的使用场景二选一即可:

  • 目标是在浏览器端的Vite页面里运行TensorFlow逻辑:
    1. 卸载Node端专属包:执行npm uninstall @tensorflow/tfjs-node
    2. 安装浏览器兼容的TF.js版本:执行npm install @tensorflow/tfjs
    3. 把代码里的导入语句替换为import * as tf from '@tensorflow/tfjs',张量创建、打印的业务逻辑不需要修改,重启dev服务即可正常运行。
  • 目标是在Vite项目的Node侧逻辑(比如Vite插件、SSR服务端代码)里调用tfjs-node:
    需要在配置里标记这个包为外置依赖,避免Vite尝试把它打包进浏览器代码,在项目根目录的vite.config.ts中添加如下配置:
import { defineConfig } from 'vite'

export default defineConfig({
  optimizeDeps: {
    exclude: ['@tensorflow/tfjs-node']
  },
  build: {
    rollupOptions: {
      external: ['@tensorflow/tfjs-node']
    }
  }
})

注意:就算添加了上述配置,tfjs-node的代码也不能在浏览器侧执行,仅能在Node环境运行的逻辑中调用。

报错信息解读

你看到的mock-aws-s3、aws-sdk、nock三个依赖缺失,是@mapbox/node-pre-gyp里的可选依赖:这个模块支持从AWS S3拉取预编译二进制文件,相关逻辑只有在特定场景下才会触发,对应依赖是动态require引入的。在Node环境下,只要没走到对应逻辑分支,就算没装这三个包也不会报错。
但Vite做依赖预构建时用的esbuild会做静态分析,不管代码实际运行时会不会走到对应分支,只要扫描到require语句就会尝试解析、打包对应依赖,找不到包就直接抛出构建错误,所以你会看到这些和业务逻辑完全无关的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:21:23