node.js - ERR_REQUIRE_ESM voor import met @xenova/transformers
In mijn NodeJS-app importeer ik op deze manier:
import { AutoModel, AutoTokenizer } from '@xenova/transformers';
En gebruik het dan zo:
const tokenizer = await AutoTokenizer.from_pretrained('bert-base-uncased');
Maar wanneer ik mijn script uitvoer, krijg ik dit:
> 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'
}
Niet zeker wat te doen?
Antwoord #1
Maker van Transformers.js hier.
Dit is een probleem dat niet specifiek is voor transformers.js (voor het grootste deel), en doet zich voor vanwege je node-resolutie-instellingen in tsconfig.json. Standaard worden alle import-verklaringen tijdens het compileren omgezet naar require.
U kunt dit als volgt oplossen:
const TransformersApi = Function('return import("@xenova/transformers")')();
const { pipeline } = await TransformersApi;
wat in principe de import gewoon uitstelt tot na de compilatie. Zie hier voor meer informatie.
