gpt4 book ai didi

node.js - module.createRequire webpack 打包

转载 作者:行者123 更新时间:2023-12-05 06:03:54 25 4
gpt4 key购买 nike

我正在尝试将一个 Node 应用程序捆绑到一个文件中。

但是在打包后检查了 webpack 的输出。

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

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

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

最佳答案

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

然而导致问题的是require(path)。对于没有任何上下文的 webpack,它会为其生成 webpackEmptyContext。除了抛出异常之外什么都不做。

绕过这个问题的一个 hacky 解决方案是用 __non_webpack_require__ 替换所考虑文件中的 require,如下所示 Using dynamic require on node targets WITHOUT resolve or bundle the target module

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

我很惊讶在以下文档中没有关于该行为的官方文档 Webpack Context , 或其他任何地方。它看起来像是经常发生的场景,尤其是在无法控制代码的情况下。我必须自己弄清楚,但愿我是弄错了,我希望有更简洁的方法来做到这一点。

关于node.js - module.createRequire webpack 打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66538449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com