我正在尝试将节点应用程序捆绑到单个文件中。
然而,在检查打包后 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,因为结果表达式将与所有模块匹配?*
我误会了Module.createRequire(path).resolve
。我以为它解析了模块,但实际上它只是解析了路径。
然而导致问题的原因是什么require(path)
。对于 webpack 来说,这是一个没有任何上下文的包,因此它会webpackEmptyContext
为其生成。除了抛出异常之外什么也不做。
一个解决方案是通过如下方式替换require
所考虑的文件中的 :在节点目标上使用动态需求而不解析或捆绑目标模块__non_webpack_require__
当然,您必须将模块复制到正确的路径,因为它们没有被捆绑。你可以用webpacCopyPlugin
它。
令我惊讶的是,在以下文档Webpack Context或其他任何地方都没有关于该行为的官方文档。这看起来是一种经常发生的情况,尤其是在无法控制代码的情况下。我必须自己弄清楚,我希望我是错的,我希望有一个更干净的方法来做到这一点。
归档时间: |
|
查看次数: |
803 次 |
最近记录: |