caoccao/Javet

Dynamic Imports

Opened this issue · 1 comments

Hello,

it seems imports in general are supported in Javet, but it is not clear whether dynamic imports are as well or not. May I ask please if there is a minimal example using dynamic imports? More specifically, I want to evaluate the following expression:

import('https://cdn.jsdelivr.net/npm/@xenova/transformers').then(({pipeline}) => {
    pipeline('sentiment-analysis').then(pipe => {
        pipe('I detest it!').then(out => {
            console.log(out)
        })
    })

})

, which takes a few seconds to complete and eventually prints a JSON object to the console. However, so far I only get the "not supported" error message.

Regarding normal import, running import { pipeline } from 'https://esm.sh/@xenova/transformers@2.16.0' returns Cannot find package 'https://esm.sh/@xenova/transformers@2.16.0'. Is there something I am missing?

Thanks

May I know which mode you were using?

Both Node.js and V8 modes don't have the built-in support to importing from arbitrary resource because:

  1. V8 is a pure script engine that doesn't know file system or network.
  2. Javet is designed to be secure by default. Allowing the guest scripts to access storage or network is not secure at all.

I suggest you write your own module resolver to empower the ESM by fetching the resource in the module resolution. Please refer to this doc for details.