Usage in Deno
import * as mod from "node:vm";
The node:vm
module enables compiling and running code within V8 Virtual
Machine contexts.
The node:vm
module is not a security
mechanism. Do not use it to run untrusted code.
JavaScript code can be compiled and run immediately or compiled, saved, and run later.
A common use case is to run the code in a different V8 Context. This means invoked code has a different global object than the invoking code.
One can provide the context by contextifying
an
object. The invoked code treats any property in the context like a
global variable. Any changes to global variables caused by the invoked
code are reflected in the context object.
import vm from 'node:vm'; const x = 1; const context = { x: 2 }; vm.createContext(context); // Contextify the object. const code = 'x += 40; var y = 17;'; // `x` and `y` are global variables in the context. // Initially, x has the value 2 because that is the value of context.x. vm.runInContext(code, context); console.log(context.x); // 42 console.log(context.y); // 17 console.log(x); // 1; y is not defined.
This feature is only available with the --experimental-vm-modules
commandflag enabled.
Instances of the vm.Script
class contain precompiled scripts that can beexecuted in specific contexts.
This feature is only available with the --experimental-vm-modules
commandflag enabled.
This feature is only available with the --experimental-vm-modules
commandflag enabled.
Compiles the given code into the provided context (if no context issupplied, the current context is used), and returns it wrapped inside afunction with the given params
.
If given a contextObject
, the vm.createContext()
method willprepare that objectand return a reference to it so that it can be used in [runInContext](.././vm/~/runInContext)
orscript.runInContext()
. Inside suchscripts, the contextObject
will be the global object, retaining all of itsexisting properties but also having the built-in objects and functions anystandard global object has. Outside of scripts run by the vm module, globalvariables will remain unchanged.
Returns true
if the given object
object has been contextified
using createContext.
Measure the memory known to V8 and used by all contexts known to thecurrent V8 isolate, or the main context.
The vm.runInContext()
method compiles code
, runs it within the context ofthe contextifiedObject
, then returns the result. Running code does not haveaccess to the local scope. The contextifiedObject
object must have beenpreviously contextified
using the createContext method.
The vm.runInNewContext()
first contextifies the given contextObject
(orcreates a new contextObject
if passed as undefined
), compiles the code
,runs it within the created context, then returns the result. Running codedoes not have access to the local scope.
vm.runInThisContext()
compiles code
, runs it within the context of thecurrent global
and returns the result. Running code does not have access tolocal scope, but does have access to the current global
object.
Returns an object containing commonly used constants for VM operations.
Stability: 1.1 - Active development