Next.js 15中使用@huggingface/transformers创建嵌入时遭遇Module parse failed错误
Next.js 15中使用@huggingface/transformers创建嵌入时遭遇Module parse failed错误
我完全理解你在Next.js 15的API路由里尝试用@huggingface/transformers生成文本嵌入时遇到的困扰——这个错误本质是Webpack无法解析onnxruntime-node的二进制绑定文件。下面给你两个可行的解决思路,你可以根据需求选择:
方案一:改用@xenova/transformers(更推荐)
你之前提到过@xenova/transformers,这个库是纯JavaScript实现的,完全不需要依赖onnxruntime-node这类二进制模块,天生适配Next.js的服务器和Edge环境,用法还和@huggingface的版本几乎一致。
修改你的API路由代码如下:import { pipeline } from '@xenova/transformers'; export async function GET() { // 初始化特征提取管道 const extractor = await pipeline( 'feature-extraction', 'Xenova/all-MiniLM-L6-v2' ); const sentences = ['This is an example sentence', 'Each sentence is converted']; // 生成嵌入并处理格式 const output = await extractor(sentences, { pooling: 'mean', normalize: true }); // 将Tensor格式转换为普通数组后返回 return new Response(JSON.stringify(output.tolist()), { headers: { 'Content-Type': 'application/json' }, }); }这个方案不需要额外修改Next.js配置,直接就能运行,兼容性和加载效率都更优。
方案二:修复@huggingface/transformers的配置问题
如果你坚持要用@huggingface/transformers,需要做两个关键调整:- 指定API路由使用Node.js Runtime
Edge Runtime不支持二进制模块,所以要在API路由顶部明确声明:export const runtime = 'nodejs'; // 强制使用Node.js运行时 - 完善Next.js配置
更新你的next.config.ts,确保正确外部化相关依赖,同时让Webpack正确处理二进制文件:
注意:执行前需要先安装import type { NextConfig } from "next"; const nextConfig: NextConfig = { output: 'standalone', serverExternalPackages: ['onnxruntime-node', '@huggingface/transformers'], webpack: (config) => { // 添加规则处理二进制.node文件 config.module.rules.push({ test: /\.node$/, use: 'file-loader', }); return config; }, }; export default nextConfig;file-loader依赖:npm install file-loader --save-dev
- 指定API路由使用Node.js Runtime
备注:内容来源于stack exchange,提问作者Tincho.UY
相关产品推荐
相关产品推荐

