这是来自jasmine 2.0.0独立项目的函数:
function getJasmineRequireObj() {
if (typeof module !== "undefined" && module.exports) {
return exports;
} else {
window.jasmineRequire = window.jasmineRequire || {};
return window.jasmineRequire;
}
}
我想如果我使用标准的require方法,将定义module属性。 当我使用VM模块加载此文件时,如下所示模块全局属性是未定义的:
var fs = require('fs');
var vm = require('vm');
var jasmineFile = fs.readFileSync(__dirname + '/jasmine.js');
vm.runInThisContext(src, jasmineFile);
这是VM模块的预期行为还是缺陷?
答案 0 :(得分:12)
这是预期的行为。您的代码在相同的上下文中进行评估,但不在同一范围内,因此module
,exports
以及未定义的内容。你可以这样做:
var m = require('module')
var src = 'module.exports = 42'
var res = require('vm').runInThisContext(m.wrap(src))(exports, require, module, __filename, __dirname)
console.log(module.exports)
但这样做没有多大意义,因为它基本上是require
所做的