После this question,Передача контекста из vm.Script других
Я бег vm.Script с пользовательским контекстом, который обеспечивает способ запуска другого vm.Script.
Я хотел бы передать контекст первого vm.Script ко второму vm.Script.
Однако, когда я проверить следующее:
var util = require('util');
var vm = require('vm');
var code1 = 'debug(this);'
+ '(function(val) {'
+ ' this.test = 2;'
+ ' lib.increment();'
+ ' lib.subcall(this);'
+ '})();'
var code2 = 'debug(this);';
var context = {
count: 1,
subcall: function(scope) {
console.log(util.inspect(scope));
var script = new vm.Script(code2);
script.runInNewContext(scope);
}
};
var sandbox = {
context: context,
lib: require('./lib')(context),
debug: function(message) { console.log(util.inspect(message)); }
}
var script = new vm.Script(code1);
script.runInNewContext(sandbox);
С lib
модуль, содержащий:
module.exports = function(context) {
return {
increment: function() {
context.count++;
},
subcall: function(scope) {
context.subcall(scope);
}
};
};
Я получаю ReferenceError (отладка не определен) внутри code2
vm.Script.
Выхода:
// debug(this) inside code1
{ context: { count: 1, subcall: [Function] },
lib: { set: [Function], increment: [Function], subcall: [Function] },
debug: [Function] }
// console.log inside subcall
{ test: 2,
context: { count: 2, subcall: [Function] },
lib: { set: [Function], increment: [Function], subcall: [Function] },
debug: [Function] }
В основном я надеялся запустить второй код с таким же контекстом, к которому было бы придано test
поля, заданное в первом коде.
Почему это не так?
Где вы называете 'code2'? – user835611
@ user835611 в 'subcall'. Я также понял, что этот код имеет другой результат в Windows и * nix. –