method Script.prototype.runInNewContext
#Script.prototype.runInNewContext(contextObject?: Context | constants.DONT_CONTEXTIFY,options?: RunningScriptInNewContextOptions,): any
This method is a shortcut to script.runInContext(vm.createContext(options), options)
.
It does several things at once:
- Creates a new context.
- If
contextObject
is an object, contextifies it with the new context. IfcontextObject
is undefined, creates a new object and contextifies it. IfcontextObject
isvm.constants.DONT_CONTEXTIFY
, don't contextify anything. - Runs the compiled code contained by the
vm.Script
object within the created context. The code does not have access to the scope in which this method is called. - Returns the result.
The following example compiles code that sets a global variable, then executes
the code multiple times in different contexts. The globals are set on and
contained within each individual context
.
const vm = require('node:vm');
const script = new vm.Script('globalVar = "set"');
const contexts = [{}, {}, {}];
contexts.forEach((context) => {
script.runInNewContext(context);
});
console.log(contexts);
// Prints: [{ globalVar: 'set' }, { globalVar: 'set' }, { globalVar: 'set' }]
// This would throw if the context is created from a contextified object.
// vm.constants.DONT_CONTEXTIFY allows creating contexts with ordinary
// global objects that can be frozen.
const freezeScript = new vm.Script('Object.freeze(globalThis); globalThis;');
const frozenContext = freezeScript.runInNewContext(vm.constants.DONT_CONTEXTIFY);
Parameters #
#contextObject: Context | constants.DONT_CONTEXTIFY
optional
Either vm.constants.DONT_CONTEXTIFY
or an object that will be contextified.
If undefined
, an empty contextified object will be created for backwards compatibility.
#options: RunningScriptInNewContextOptions
optional
Return Type #
any
the result of the very last statement executed in the script.