Tiny virtual machine for browser to execute javascript modules in Web Worker.
- Run code in a isolated scope without pollute your environment
 - Support CommonJS and ESModules (by plugin)
 - Support TypeScript and Flow (by plugin)
 - Based on Web Worker
 
App.js
import VM from 'vm-worker'
const vm = VM({
  debug: false, // default false
  timeout: 100000, // default 100000ms
})
await vm.require([
  {
    path: 'module-one/index.js',
    src: 'module.exports = 1',
  },
  {
    path: '/dirA/a.js',
    url: 'https://xxx.com/a.js',
  },
  {
    path: '/dirB/b.js',
    src: 'module.exports = require("../dirA/a")',
  },
])
await vm.exec('/dirB/b.js', 1, 2) // => 4
vm.terminate()a.js
module.exports = (a, b) => (a + b + require('module-one'))App.js
import VM from 'vm-worker'
import ESMPlugin from 'vm-worker/dist/plugins/esmodule.esm'
const vm = VM({
  plugins: [
    ESMPlugin(),
  ],
})
await vm.require([
  {
    path: 'module-one/index.js',
    src: `export const ONE = 1`
  },
  {
    path: '/dirA/a.js',
    url: 'https://xxx.com/a.js',
  },
  {
    path: '/dirB/b.js',
    src: `import { plus } from "../dirA/a"
          export default plus`,
  },
])
await vm.exec('/dirB/b.js', 1, 2) // => 4
vm.terminate()a.js
import { ONE } from 'module-one'
export function plus(a, b) {
  return a + b + ONE
}Sucrase is similar to Babel, which compiles TypeScript, Flow and JSX to standard JavaScript.
Sucrase transform options document
App.js
import VM from 'vm-worker'
import SucrasePlugin from 'vm-worker/dist/plugins/sucrase.esm'
const vm = VM({
  plugins: [
    SucrasePlugin({
      ... // Sucrase transform options
    }),
  ],
})
await vm.require([
  {
    path: 'module-one/index.js',
    src: `export const ONE: number = 1`
  },
  {
    path: '/dirA/a.js',
    url: 'https://xxx.com/a.js',
  },
  {
    path: '/dirB/b.js',
    src: `import { plus } from "../dirA/a"
          export default plus`,
  },
])
await vm.exec('/dirB/b.js', 1, 2) // => 4
vm.terminate()a.js
import { ONE } from 'module-one'
export function plus(a: number, b: number) {
  return a + b + ONE
}npm i vm-worker