module.create需要 webpack 捆绑

Ram*_* ZK 5 node.js webpack

我正在尝试将节点应用程序捆绑到单个文件中。

然而,在检查打包后 webpack 的输出后。

我发现其中一个库用于Module.createRequire在运行时加载某些模块。检查捆绑的代码,我了解到 webpack 不会替换Module.createRequire(path).resolve__webpack_require__,这导致我的应用程序在捆绑后依赖于 node_module 。

我可以想到一个简单的解决方案,通过修改库的代码并使用require而不是Module.createRequire. 但我不想修改库代码,因为每次我想更新库时都会增加额外的头痛。

Module.createRequire(myPath)其次,我想知道我是否根据Webpack Context替换以下代码,require(myPath)webpack会捆绑所有 node_modules,因为结果表达式将与所有模块匹配?*

Ram*_* ZK 1

我误会了Module.createRequire(path).resolve。我以为它解析了模块,但实际上它只是解析了路径。

然而导致问题的原因是什么require(path)。对于 webpack 来说,这是一个没有任何上下文的包,因此它会webpackEmptyContext为其生成。除了抛出异常之外什么也不做。

一个解决方案是通过如下方式替换require所考虑的文件中的 :在节点目标上使用动态需求而不解析或捆绑目标模块__non_webpack_require__

当然,您必须将模块复制到正确的路径,因为它们没有被捆绑。你可以用webpacCopyPlugin它。

令我惊讶的是,在以下文档Webpack Context或其他任何地方都没有关于该行为的官方文档。这看起来是一种经常发生的情况,尤其是在无法控制代码的情况下。我必须自己弄清楚,我希望我是错的,我希望有一个更干净的方法来做到这一点。