ERR_REQUIRE_ESM 用于使用 @xenova/transformers 导入

str*_*rks 2 node.js typescript huggingface-transformers

在我的 NodeJS 应用程序中,我像这样导入:

import { AutoModel, AutoTokenizer } from '@xenova/transformers';
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

const tokenizer = await AutoTokenizer.from_pretrained('bert-base-uncased');
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时,我得到以下信息:

> node --experimental-modules lib/index.js

No storage option exists to persist the session, which may result in unexpected behavior when using auth.
        If you want to set persistSession to true, please provide a storage option or you may set persistSession to false to disable this warning.
Starting script...
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/me/Projects/node_modules/@xenova/transformers/src/transformers.js from /home/me/Projects/lib/pinecone/utils.js not supported.
Instead change the require of transformers.js in /home/me/Projects/lib/pinecone/utils.js to a dynamic import() which is available in all CommonJS modules.
    at /home/me/Projects/lib/pinecone/utils.js:34:81
    at async syncProfilesOnPinecone (/home/me/Projects//lib/pinecone/utils.js:34:33)
    at async main (/home/me/Projects/lib/index.js:9:5) {
  code: 'ERR_REQUIRE_ESM'
}
Run Code Online (Sandbox Code Playgroud)

不知道该怎么办?

Xen*_*ova 5

Transformers.js 的创建者在这里。

这是一个并非 Transformers.js 特有的问题(大多数情况下),并且是由于 tsconfig.json 中的节点分辨率设置而发生的。默认情况下,所有import语句都会在编译期间转换为require

您可以按如下方式修复此问题:

TransformersApi = Function('return import("@xenova/transformers")')();
const { pipeline } = await TransformersApi;
Run Code Online (Sandbox Code Playgroud)

这基本上只是将导入延迟到编译后。浏览此处获取更多信息。