【问题标题】:How can I require external commonjs modules at runtime from a bundle that was built by webpack如何在运行时从 webpack 构建的包中需要外部 commonjs 模块
【发布时间】:2019-11-21 04:17:28
【问题描述】:

在客户项目中有一种插件系统。 它是这样工作的: 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 实现吗?

【问题讨论】:

    标签: webpack


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-04-11
      • 2017-09-11
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 2016-09-12
      • 2021-05-26
      相关资源
      最近更新 更多