Javet icon indicating copy to clipboard operation
Javet copied to clipboard

Dynamic Imports

Open aghasemi opened this issue 1 year ago • 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/[email protected]' returns Cannot find package 'https://esm.sh/@xenova/[email protected]'. Is there something I am missing?

Thanks

aghasemi avatar Mar 18 '24 22:03 aghasemi

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.

caoccao avatar Mar 18 '24 23:03 caoccao