我发现了这个问题,因为我使用webpack
将代码与vm
模块捆绑在一起。
例如:
const vm = require('vm');
vm.runInNewContext(`
const querystring = require('querystring');
console.log(querystring.parse('foo=bar&abc=xyz&abc=123'));
`, {
console,
require,
});
这个代码在节点中运行很好。当我用webpack@1.14
捆绑它时。好像是:
nodeVm.runInNewContext("\n
const querystring = require('querystring');\n\n
console.log(querystring.parse('foo=bar&abc=xyz&abc=123'));\n ",{
console: console,
require: __webpack_require__(296)
});
webpack@2.3.2
。好像是
nodeVm.runInNewContext("\n
const querystring = require('querystring');\n\n
console.log(querystring.parse('foo=bar&abc=xyz&abc=123'));\n ", {
console: console,
require: !(function webpackMissingModule() { var e = new Error("Cannot find module \".\""); e.code = 'MODULE_NOT_FOUND'; throw e; }())
});
因为require
已更改为__webpack_require__
,querystring
中的vm
模块将无法发现。
有没有办法让webpack忽略以将require
更改为__webpack_require__
?
答案 0 :(得分:0)
如果您想保持原样,我确信它可以工作,但不确定它是否也适用于您的情况。
正是为此存在变量 __non_webpack_require__
,遵循 documentation
const a = __non_webpack_require__(myvar);
变成:
const a = require(myvar);
被webpack编译后。