我如何在运行时从Webpack构建的捆绑包中需要外部commonjs模块

时间:2019-07-11 12:33:02

标签: webpack

在客户项目中,有一种插件系统。 它是这样工作的: JS文件位于某个目录中。假设/plugins

这些插件导出具有共同签名的函数。

现在,我将其余代码与webpack捆绑在一起。我想通过require(someVar)动态加载这些模块。

由于我在构建时不知道插件文件,因此无法将它们与webpack捆绑在一起。

我尝试创建一些外部组件,例如,运气不好

externals: [
  (_context, request, callback) =>
    /^\/plugins\/.*$/.test(request)
      ? callback(null, `commonjs ${request}`)
      : callback(),
],

在运行时,它会引发如下错误:

Error: Cannot find module '/plugins/file.js'
    at webpackEmptyContext (filex.js:line:col)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at Socket.Readable.push (_stream_readable.js:208:10)
    at Pipe.onread (net.js:594:20)

如何不捆绑这些文件,并在运行时从文件系统中要求它们?使用webpack甚至有可能吗?

1 个答案:

答案 0 :(得分:0)

好的,我找到了解决方法:

const dynamicRequire =
  typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;

这适用于webpack和ts-node(我在开发时使用ts-node)。