繁体   English   中英

Webpack可变命名为require

[英]Webpack variably named requires

我正在编写一个具有功能模块的nodejs / react应用,理想情况下,这些功能可以通过configuration.json文件进行打开和关闭。 功能模块有一个入口来为它们的请求建立服务器端路由,并在React中建立一个客户端路由。

服务器端配置工作正常。 在服务器启动时,它会检查配置设置,加载适当的模块,并调用其register()函数,以注册其服务器端路由,控制器等。但是,当尝试将Web捆绑包打包以部署到对于客户端,我在尝试遍历要包含的模块列表并将它们通过Web打包到要部署的捆绑包中时遇到问题。

到目前为止,我已经做了很多研究,但是webpack仍然很难理解。 我最近来的是在我的webpack.config.js文件中添加了一个部分,以将路由预加载到各个模块,将其包含在捆绑包中以在客户端上提供代码,然后将其名称粘贴到FEATURE_MODULES全局变量中通过DefinePlugin定义变量,并检查React中是否存在该变量,以在这些模块到达浏览器后尝试加载和注册()。

到目前为止,该代码似乎已添加到捆绑软件中,并且模块路径已在该全局变量中正确传递给客户端,但是尝试在客户端上使用require()会引发有关找不到模块的错误,最有可能是因为webpack正在用其查找映射的数字替换模块名称。

我也遇到过有关require.context和RegExp这些东西的事情,但这就是我开始迷路的地方。 有人可以给我提供示例或指向更易用的东西的链接,以演示如何完成此操作吗?

无法100%清楚您正在做的事情正在打破(如果上述方法无济于事,您可以发布具体细节吗?),但是要遵循一般准则:

  • Webpack将解析它在代码中看到的所有require(); 这是一个不是很“智能”的静态解析器。 因此围绕传统需求的条件逻辑无法解决您的问题,因为所有需求都将被解析
  • 如果您的条件检查布尔变量(通常通过Define插件定义),则webpack解析器将理解它们,只有通过条件检查的需求才会被解析。 然后,您可以使用Uglify插件的无效代码消除功能来摆脱不需要的条件逻辑。
  • “动态”需求通常不是一个好主意,因为它们会导致webpack将请求目录中的每个文件捆绑在一起(因为它无法在构建时确定您要的是哪个文件)。 如果您要的是不存在的内容,则可能会遇到运行时错误(显然,构建时错误更可取)。

以上内容将使您几乎需要任何东西。 并且用数字替换文件路径是webpack运行时的工作方式,因此,如果出现问题,则可能是错误的处理方式。

如果您似乎必须通过define插件定义太多标志,和/或设置太多条件逻辑,那么这些单独的构建吗? 使用单个webpack配置文件来设置多个构建,并在它们之间重用共享的配置是非常容易的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM