如何在webpack中忽略编译`require`到`__webpack_require__`?

时间:2017-03-30 02:55:07

标签: node.js webpack

我发现了这个问题,因为我使用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__

1 个答案:

答案 0 :(得分:0)

如果您想保持原样,我确信它可以工作,但不确定它是否也适用于您的情况。

正是为此存在变量 __non_webpack_require__,遵循 documentation

const a = __non_webpack_require__(myvar);

变成:

const a = require(myvar);

被webpack编译后。