在严格模式下使用vm运行node.js脚本时未定义导出

在严格模式下使用vm运行node.js脚本时未定义导出,node.js,node-modules,strict-mode,Node.js,Node Modules,Strict Mode,我在许多模块中看到了这段代码: var app = exports = module.exports = {}; 但是我在严格模式下执行这些模块时遇到了一些问题 这里有一个演示: var code = ` 'use strict'; // Works if I remove this line var app = exports = module.exports; `; var vm = require('vm'); var vmModule = { exports: {} }; var c

我在许多模块中看到了这段代码:

var app = exports = module.exports = {};
但是我在严格模式下执行这些模块时遇到了一些问题

这里有一个演示:

var code = `
'use strict'; // Works if I remove this line
var app = exports = module.exports;
`;

var vm = require('vm');
var vmModule = { exports: {} };
var context = vm.createContext({
  exports: vmModule.exports,
  module: vmModule
});
var script = new vm.Script(code);

script.runInContext(context);
console.log("ok");
如果我运行此代码,我会收到一个
导出未定义的错误。
如果没有
使用严格的
,上述代码可以正常工作


为什么类似的声明适用于标准节点模块,但不适用于vm脚本?我应该以不同的方式声明上下文吗?

正如@mscdex所指出的,这可能是node的问题。看

一种可能的解决方法(我希望没有其他影响)是将所有代码包装到iife函数中:

const iifeCode = `(function(exports){${code}}(module.exports));`;
然后执行
iifeCode
,而不是
code

var script = new vm.Script(iifeCode);
请参阅:。显然这仍然是个问题。