Skip to content

Dynamically load and run remote modules/scripts or UI components from a remote URL for the Browser or Node.js like deno. Update project-code or hotload plugins without redeploying

License

Notifications You must be signed in to change notification settings

microflows/nodeVM

Repository files navigation

Node Virtual Module

  • Dynamically load and run JS module from remote for the Browser or Node.js.
  • Lazy Load Modules to keep initial load times down and load modules just in time, similar to Webpack's code splitting.
  • Update Remote Modules independent of the web application. Update a module without redeploying the web application.
  • A new method of SSR, server-side rendering js instead of html.
  • As fast as your native code.
  • Support remote module dependency.
  • Manage your pkg in both way of centralized and decentralized. Support moduleName / http(s), ipfs is planned.
  • Only 11kb after compilation.

Install

npm install @microflows/nodevm

Getting start

Example

Async/Await Style

import vm from "@microflows/nodevm";

async function main() {
  const newService = await vm("https://cdn.jsdelivr.net/gh/microflows/mfNode.js@publish/release/index.js");
  console.log(newService().name);
}

main();

Promise Style

import vm from "@microflows/nodevm";

console.log(
  vm("https://cdn.jsdelivr.net/gh/microflows/mfNode.js@publish/release/index.js").then(
    newService => newService().name
  )
);

Use with init

import { newVM } from "@microflows/nodevm";

// public cache
const vm = newVM()

console.log(
  vm("https://cdn.jsdelivr.net/gh/microflows/mfNode.js@publish/release/index.js").then(
    newService => newService().name
  )
);

import module directly

import vm from "@microflows/nodevm";

// will fetch react.js from https://www.jsdelivr.com/react
const react = vm('react')

Advance

Arguments

name type description
url string remote module url
fetcher Fetcher custom fetcher
runtime string[] code exec before remote module
dependencies object custom dependencies (you donnot need this when using mfNode)

Using your own fetcher

The default loader can be overridden if you want to use an alternate method.

This example uses axios for the fetcher.

import vm from "@microflows/nodevm";
import axios from "axios";

const fetcher = url => axios.get(url).then(request => request.data);

vm(url:"https://cdn.jsdelivr.net/gh/microflows/mfNode.js@publish/release/index.js",fetcher:fetcher)

Add runtime attachment

import vm from "@microflows/nodevm";

const const runtime = ["const __dirname = '/home'"]

vm(url:"https://cdn.jsdelivr.net/gh/microflows/mfNode.js@publish/release/index.js",runtime:runtime)

Content Security Policy (CSP)

Sites with a content_security_policy header set are likely to not work. CSP puts a restriction on using new Function, which remote-module-loader relies upon.

Read more on CSP

License

Apache License, Version 2.0

Copyright [2021] [microflow]

This project is based on remote-module-loader

Contributors✨

Thanks goes to these wonderful people (emoji key):


joelnet

💻

SOVLOOKUP

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

About

Dynamically load and run remote modules/scripts or UI components from a remote URL for the Browser or Node.js like deno. Update project-code or hotload plugins without redeploying

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •