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);